Represents an immutable generic message with support for headers, name and a payload
Esempio n. 1
0
        public void WhenMultipleSubscribers_EachGetOwnMessage()
        {
            // arrange
            var client = CreateOutboundTransportMock();

            // create two subscriptions for "mytopic"
            this.subscriptionStore.AddSubscription(new Subscription("mytopic", "e1", "c1"));
            this.subscriptionStore.AddSubscription(new Subscription("mytopic", "e2", "c2"));

            var bus = new MessageBus(this.subscriptionManager, client.Object, NullLoggerFactory.Instance);
            var message = new Message(new object(), "mytopic");

            // act
            bus.Send(message);

            // assert
            // since multiple messages are to be sent, it should use the SendMultiple method
            client.Verify(b => b.Send(It.IsAny<TransportMessage>()), Times.Never);
            client.Verify(b =>
                b.SendMultiple(It.Is<IEnumerable<TransportMessage>>(msgs =>
                    msgs.Count() == 2 &&
                    msgs.Count(m => m.Headers[MessageHeaders.Endpoint] == "e1" &&
                                    m.Headers[MessageHeaders.Component] == "c1") == 1 &&
                    msgs.Count(m => m.Headers[MessageHeaders.Endpoint] == "e2" &&
                                    m.Headers[MessageHeaders.Component] == "c2") == 1)
                    ), Times.Once);
        }
Esempio n. 2
0
        private TransportMessage BuildTransportMessage(Message message, Subscription subscription)
        {
            JObject jsonPayload = message.Payload is JObject ? 
                                    (JObject)message.Payload
                                    : JObject.FromObject(message.Payload);

            var transportMessage = new TransportMessage();
            // reuse existing Id or create a new one
            transportMessage.Id = message.Headers.GetOrDefault(MessageHeaders.Id) ?? Guid.NewGuid().ToString();
            transportMessage.Name = message.Name;
            transportMessage.Body = jsonPayload;

            // copy original headers
            foreach (var header in message.Headers)
            {
                transportMessage.Headers[header.Key] = header.Value;
            }
            
            // add subscription headers
            transportMessage.Headers[MessageHeaders.Endpoint] = subscription.Endpoint; // destination queue / processor
            transportMessage.Headers[MessageHeaders.Component] = subscription.Component; //handler within the processor

            Console.WriteLine("Sending {0} to {1}", transportMessage.Name, subscription.Endpoint);

            return transportMessage;
        }
Esempio n. 3
0
        public void WhenNoSubscribers_MessageIsNotSent()
        {
            // arrange
            var client = CreateOutboundTransportMock();
            var bus = new MessageBus(this.subscriptionManager, client.Object, NullLoggerFactory.Instance);
            var message = new Message(new object(), "topic");

            // act
            bus.Send(message);

            // assert
            client.Verify(b => b.Send(It.IsAny<TransportMessage>()), Times.Never);
        }
Esempio n. 4
0
 public Task Send(Message message)
 {
     return Send(new[] { message });
 }