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); }
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; }
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); }
public Task Send(Message message) { return Send(new[] { message }); }