private void PublishMessage(AgentBrokerPayload data)
        {
            var context = data.Context ?? ApplicationMessageContext;
            var message = _messageConverter.ConvertMessage(data.Payload, context, data.Ordinal);

            _messagePublisher.PublishMessage(message); // TODO: Hook into offThread
        }
        public void SendMessage(object payload)
        {
            // need to fetch context data here as we are about to start switching threads
            var data = new AgentBrokerPayload(payload, _context.Value, Interlocked.Increment(ref _ordinal));
            
            // non-blocking
            _publisherInternalSubject.OnNext(data);

            // non-blocking
            _offSenderThreadInternalSubject.OnNext(data);

            // blocking
            _onSenderThreadSubject.OnNext(data);
        }