コード例 #1
0
        public void Bus_PublishedMessage_EachSubscriberGetsMessageCopy()
        {
            Person actual = new Person
            {
                Id = 5
            };

            Person b1 = null, b2 = null, c1 = null;

            ManualResetEvent ev1 = new ManualResetEvent(false), ev2 = new ManualResetEvent(false), ev3 = new ManualResetEvent(false);

            using (MessageBus.Core.RabbitMQBus busA = new MessageBus.Core.RabbitMQBus(), busB = new MessageBus.Core.RabbitMQBus(), busC = new MessageBus.Core.RabbitMQBus())
            {
                using (ISubscriber subscriberB1 = busB.CreateSubscriber(), subscriberB2 = busB.CreateSubscriber(), subscriberC1 = busC.CreateSubscriber())
                {
                    subscriberB1.Subscribe <Person>(p => { b1 = p; ev1.Set(); });
                    subscriberB2.Subscribe <Person>(p => { p.Id *= 2; b2 = p; ev2.Set(); });
                    subscriberC1.Subscribe <Person>(p => { c1 = p; ev3.Set(); });

                    subscriberB1.Open();
                    subscriberB2.Open();
                    subscriberC1.Open();

                    using (IPublisher publisher = busA.CreatePublisher())
                    {
                        publisher.Send(actual);
                    }

                    bool wait = ev1.WaitOne(TimeSpan.FromSeconds(5)) &&
                                ev2.WaitOne(TimeSpan.FromSeconds(5)) &&
                                ev3.WaitOne(TimeSpan.FromSeconds(5));

                    wait.Should().BeTrue("Message should arrive to all subscribers");

                    b1.Should().NotBeNull();
                    b2.Should().NotBeNull();
                    c1.Should().NotBeNull();

                    b1.ShouldBeEquivalentTo(actual);
                    b2.ShouldBeEquivalentTo(new Person
                    {
                        Id = actual.Id * 2
                    });
                    c1.ShouldBeEquivalentTo(actual);
                }
            }
        }
コード例 #2
0
        public void Bus_PublishedMessage_EachReceiverGetsMessageCopy()
        {
            Person actual = new Person
            {
                Id = 5
            };

            using (MessageBus.Core.RabbitMQBus busA = new MessageBus.Core.RabbitMQBus(), busB = new MessageBus.Core.RabbitMQBus(), busC = new MessageBus.Core.RabbitMQBus())
            {
                using (IReceiver receiverB1 = busB.CreateReceiver(), receiverB2 = busB.CreateReceiver(), receiverC1 = busC.CreateReceiver())
                {
                    receiverB1.Subscribe <Person>();
                    receiverB2.Subscribe <Person>();
                    receiverC1.Subscribe <Person>();

                    receiverB1.Open();
                    receiverB2.Open();
                    receiverC1.Open();

                    using (IPublisher publisher = busA.CreatePublisher())
                    {
                        publisher.Send(actual);
                    }

                    Person b1 = receiverB1.Receive <Person>();
                    Person b2 = receiverB2.Receive <Person>();
                    Person c1 = receiverC1.Receive <Person>();

                    b1.Should().NotBeNull();
                    b2.Should().NotBeNull();
                    c1.Should().NotBeNull();

                    b1.ShouldBeEquivalentTo(actual);
                    b2.ShouldBeEquivalentTo(actual);
                    c1.ShouldBeEquivalentTo(actual);
                }
            }
        }
コード例 #3
0
        public void Bus_PublishedMessage_FilterByHeader()
        {
            Person actualT1 = new Person
            {
                Id = 5
            };

            Person actualT2 = new Person
            {
                Id = 15
            };

            const string header = "type";

            using (MessageBus.Core.RabbitMQBus busA = new MessageBus.Core.RabbitMQBus(), busB = new MessageBus.Core.RabbitMQBus(), busC = new MessageBus.Core.RabbitMQBus())
            {
                using (IReceiver receiverB1 = busB.CreateReceiver(), receiverB2 = busB.CreateReceiver(), receiverC1 = busC.CreateReceiver())
                {
                    receiverB1.Subscribe <Person>(filter: new[] { new BusHeader {
                                                                      Name = header, Value = "T1"
                                                                  } });
                    receiverB2.Subscribe <Person>(filter: new[] { new BusHeader {
                                                                      Name = header, Value = "T2"
                                                                  } });
                    receiverC1.Subscribe <Person>(filter: new[] { new BusHeader {
                                                                      Name = header, Value = "T1"
                                                                  } });

                    receiverB1.Open();
                    receiverB2.Open();
                    receiverC1.Open();

                    using (IPublisher publisher = busA.CreatePublisher())
                    {
                        BusMessage <Person> m1 = new BusMessage <Person> {
                            Data = actualT1
                        };
                        m1.Headers.Add(new BusHeader {
                            Name = header, Value = "T1"
                        });

                        publisher.Send(m1);

                        BusMessage <Person> m2 = new BusMessage <Person> {
                            Data = actualT2
                        };
                        m2.Headers.Add(new BusHeader {
                            Name = header, Value = "T2"
                        });

                        publisher.Send(m2);
                    }

                    Person b1 = receiverB1.Receive <Person>();
                    Person b2 = receiverB2.Receive <Person>();
                    Person c1 = receiverC1.Receive <Person>();

                    b1.Should().NotBeNull();
                    b2.Should().NotBeNull();
                    c1.Should().NotBeNull();

                    b1.ShouldBeEquivalentTo(actualT1);
                    b2.ShouldBeEquivalentTo(actualT2);
                    c1.ShouldBeEquivalentTo(actualT1);
                }
            }
        }
コード例 #4
0
        public void Bus_PublishedMessage_FilterByHeader()
        {
            Person actualT1 = new Person
            {
                Id = 5
            };

            Person actualT2 = new Person
            {
                Id = 15
            };

            Person b1 = null, b2 = null, c1 = null;

            const string header = "type";

            ManualResetEvent ev1 = new ManualResetEvent(false), ev2 = new ManualResetEvent(false), ev3 = new ManualResetEvent(false);

            using (MessageBus.Core.RabbitMQBus busA = new MessageBus.Core.RabbitMQBus(), busB = new MessageBus.Core.RabbitMQBus(), busC = new MessageBus.Core.RabbitMQBus())
            {
                using (ISubscriber subscriberB1 = busB.CreateSubscriber(), subscriberB2 = busB.CreateSubscriber(), subscriberC1 = busC.CreateSubscriber())
                {
                    subscriberB1.Subscribe <Person>(p => { b1 = p; ev1.Set(); }, filter: new[] { new BusHeader {
                                                                                                     Name = header, Value = "T1"
                                                                                                 } });
                    subscriberB2.Subscribe <Person>(p => { b2 = p; ev2.Set(); }, filter: new[] { new BusHeader {
                                                                                                     Name = header, Value = "T2"
                                                                                                 } });
                    subscriberC1.Subscribe <Person>(p => { c1 = p; ev3.Set(); }, filter: new[] { new BusHeader {
                                                                                                     Name = header, Value = "T1"
                                                                                                 } });

                    subscriberB1.Open();
                    subscriberB2.Open();
                    subscriberC1.Open();

                    using (IPublisher publisher = busA.CreatePublisher())
                    {
                        BusMessage <Person> m1 = new BusMessage <Person> {
                            Data = actualT1
                        };
                        m1.Headers.Add(new BusHeader {
                            Name = header, Value = "T1"
                        });

                        publisher.Send(m1);

                        BusMessage <Person> m2 = new BusMessage <Person> {
                            Data = actualT2
                        };
                        m2.Headers.Add(new BusHeader {
                            Name = header, Value = "T2"
                        });

                        publisher.Send(m2);
                    }

                    bool wait = ev1.WaitOne(TimeSpan.FromSeconds(5)) &&
                                ev2.WaitOne(TimeSpan.FromSeconds(5)) &&
                                ev3.WaitOne(TimeSpan.FromSeconds(5));

                    wait.Should().BeTrue("Message should arrive to all subscribers");

                    b1.Should().NotBeNull();
                    b2.Should().NotBeNull();
                    c1.Should().NotBeNull();

                    b1.ShouldBeEquivalentTo(actualT1);
                    b2.ShouldBeEquivalentTo(actualT2);
                    c1.ShouldBeEquivalentTo(actualT1);
                }
            }
        }