コード例 #1
0
 public void Send(TransportMessage toSend, IEnumerable <string> destinations)
 {
     TransactionWrapper.RunInTransaction(transaction => {
         toSend.TimeSent       = DateTime.UtcNow;
         toSend.ReturnAddress  = this.ReturnAddress;
         var serializedMessage = string.Empty;
         using (var stream = new MemoryStream()) {
             TransportMessageSerializer.Serialize(toSend, stream);
             foreach (var destination in destinations)
             {
                 var conversationHandle = ServiceBrokerWrapper.SendOne(transaction, ReturnAddress, destination, NServiceBusTransportMessageContract, NServiceBusTransportMessage, stream.ToArray());
                 toSend.Id = conversationHandle.ToString();
                 if (Logger.IsDebugEnabled)
                 {
                     Logger.Debug(string.Format("Sending message {0} with ID {1} to destination {2}.\n" +
                                                "ToString() of the message yields: {3}\n" +
                                                "Message headers:\n{4}",
                                                toSend.Body[0].GetType().AssemblyQualifiedName,
                                                toSend.Id,
                                                destination,
                                                toSend.Body[0],
                                                string.Join(", ", toSend.Headers.Select(h => h.Key + ":" + h.Value).ToArray())
                                                ));
                 }
             }
         }
     });
 }
コード例 #2
0
        public void Handle(PersistMessageCommand message)
        {
            if (message.Targets == null)
            {
                return;
            }

            var transportMessage = message.TransportMessage;

            if (string.IsNullOrEmpty(transportMessage.MessageTypeId.FullName))
            {
                _log.Error($"Message received with empty TypeId, MessageId: {transportMessage.Id}, SenderId: {transportMessage.Originator.SenderId}");
                return;
            }

            var transportMessageBytes = _serializer.Serialize(transportMessage);

            foreach (var target in message.Targets)
            {
                if (string.IsNullOrEmpty(target.ToString()))
                {
                    _log.Error($"Message received with empty target, MessageId: {transportMessage.Id}, SenderId: {transportMessage.Originator.SenderId}");
                    continue;
                }

                if (_configuration.PeerIdsToInvestigate != null && _configuration.PeerIdsToInvestigate.Contains(target.ToString()))
                {
                    _log.Info($"Message received for peer {target}, MessageId: {transportMessage.Id}, MessageType: {transportMessage.MessageTypeId}");
                }

                _messageReplayerRepository.GetActiveMessageReplayer(target)?.AddLiveMessage(transportMessage);
                _inMemoryMessageMatcher.EnqueueMessage(target, transportMessage.Id, transportMessage.MessageTypeId, transportMessageBytes);
            }
        }
コード例 #3
0
        private List <TransportMessage> InsertMessagesInThePast(DateTime refDateTime, int messageCount = 11)
        {
            MessageId.ResetLastTimestamp(); // because it goes back in the past!

            var refTime           = refDateTime.AddHours(-messageCount);
            var transportMessages = new List <TransportMessage>();

            for (var i = 0; i < messageCount; ++i)
            {
                TransportMessage transportMessage;
                using (SystemDateTime.Set(refTime))
                {
                    transportMessage = new FakeCommand(i).ToTransportMessage(_anotherPeer);
                }
                transportMessages.Add(transportMessage);

                _insertedMessages.AddRange(_transportMessageSerializer.Serialize(transportMessage));
                refTime = refTime.AddHours(1);
            }

            return(transportMessages);
        }
コード例 #4
0
        public void Handle(PersistMessageCommand message)
        {
            if (message.Targets == null)
            {
                return;
            }

            var transportMessage      = message.TransportMessage;
            var transportMessageBytes = _serializer.Serialize(transportMessage);

            foreach (var target in message.Targets)
            {
                if (_configuration.PeerIdsToInvestigate != null && _configuration.PeerIdsToInvestigate.Contains(target.ToString()))
                {
                    _log.Info($"Message received for peer {target}. MessageId: {transportMessage.Id}. MessageType: {transportMessage.MessageTypeId}");
                }

                _messageReplayerRepository.GetActiveMessageReplayer(target)?.AddLiveMessage(transportMessage);
                _inMemoryMessageMatcher.EnqueueMessage(target, transportMessage.Id, transportMessage.MessageTypeId, transportMessageBytes);
            }
        }