Exemple #1
0
        public void Bus_MakeSyncRpcCall_NoFastReply_CustomExchange()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber(c => c.SetReplyExchange("amq.direct")))
                {
                    subscriber.Subscribe((RequestMessage m) => new ResponseMessage
                    {
                        Code = m.Data.Length
                    });

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher(c => c.DisableFastReply().SetReplyExchange("amq.direct").SetReplyTo("MyReplyKey")))
                    {
                        ResponseMessage response = rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                        {
                            Data = "Hello, world!"
                        }, TimeSpan.FromSeconds(10));

                        response.ShouldBeEquivalentTo(new ResponseMessage
                        {
                            Code = 13
                        });
                    }
                }
            }
        }
Exemple #2
0
        public void Bus_MakeRpcCall_TimeOutOnReply()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber())
                {
                    subscriber.Subscribe((RequestMessage m) => Thread.Sleep(TimeSpan.FromSeconds(20)));

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                    {
                        try
                        {
                            rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                            {
                                Data = "Hello, world!"
                            }, TimeSpan.FromSeconds(10));

                            Assert.Fail("No exception");
                        }
                        catch (RpcCallException ex)
                        {
                            ex.Reason.Should().Be(RpcFailureReason.TimeOut);
                        }
                    }
                }
            }
        }
Exemple #3
0
        public void Bus_MakeRpcCall_RejectedByHandler()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber(c => c.UseTransactionalDelivery()))
                {
                    subscriber.Subscribe((RequestMessage m) => {
                        throw new RejectMessageException();
                    });

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                    {
                        try
                        {
                            rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                            {
                                Data = "Hello, world!"
                            }, TimeSpan.FromSeconds(10));

                            Assert.Fail("No exception");
                        }
                        catch (RpcCallException ex)
                        {
                            ex.Reason.Should().Be(RpcFailureReason.Reject);
                        }
                    }
                }
            }
        }
Exemple #4
0
        public void Bus_MakeRpcVoidCall_SubscriberDoNotReturnData()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber())
                {
                    RequestMessage actual = null;

                    subscriber.Subscribe((RequestMessage m) =>
                    {
                        actual = m;
                    });

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                    {
                        var expected = new RequestMessage
                        {
                            Data = "Hello, world!"
                        };

                        rpcPublisher.Send(expected, TimeSpan.FromSeconds(10));

                        actual.ShouldBeEquivalentTo(expected);
                    }
                }
            }
        }
Exemple #5
0
        public void Bus_MakeSyncRpcCall()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber())
                {
                    subscriber.Subscribe((RequestMessage m) => new ResponseMessage
                    {
                        Code = m.Data.Length
                    });

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                    {
                        ResponseMessage response = rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                        {
                            Data = "Hello, world!"
                        }, TimeSpan.FromSeconds(10));

                        response.ShouldBeEquivalentTo(new ResponseMessage
                        {
                            Code = 13
                        });
                    }
                }
            }
        }
Exemple #6
0
        public void Bus_MultiClientRpcCall()
        {
            using (IBus serviceBus = new RabbitMQBus(), client1Bus = new RabbitMQBus(), client2Bus = new RabbitMQBus())
            {
                using (ISubscriber subscriber = serviceBus.CreateSubscriber())
                {
                    subscriber.Subscribe((RequestMessage m) => new ResponseMessage
                    {
                        Code = int.Parse(m.Data)
                    });

                    subscriber.Open();

                    const int calls = 20;

                    using (IRpcPublisher rpcPublisher1 = client1Bus.CreateRpcPublisher(), rpcPublisher2 = client2Bus.CreateRpcPublisher())
                    {
                        List <ResponseMessage> c1Responses = new List <ResponseMessage>(), c2Responses = new List <ResponseMessage>();

                        Task t1 = Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < calls; i++)
                            {
                                ResponseMessage response =
                                    rpcPublisher1.Send <RequestMessage, ResponseMessage>(new RequestMessage
                                {
                                    Data = "1"
                                }, TimeSpan.FromSeconds(10));

                                c1Responses.Add(response);
                            }
                        });

                        Task t2 = Task.Factory.StartNew(() =>
                        {
                            for (int i = 0; i < calls; i++)
                            {
                                ResponseMessage response =
                                    rpcPublisher2.Send <RequestMessage, ResponseMessage>(new RequestMessage
                                {
                                    Data = "2"
                                }, TimeSpan.FromSeconds(10));


                                c2Responses.Add(response);
                            }
                        });

                        Task.WaitAll(t1, t2);

                        c1Responses.Should().HaveCount(calls);
                        c2Responses.Should().HaveCount(calls);

                        c1Responses.All(message => message.Code == 1).Should().BeTrue();
                        c2Responses.All(message => message.Code == 2).Should().BeTrue();
                    }
                }
            }
        }
Exemple #7
0
        public void Bus_MakeAsyncRpcCall()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (ISubscriber subscriber = bus.CreateSubscriber())
                {
                    subscriber.Subscribe((RequestMessage m) => new ResponseMessage
                    {
                        Code = m.Data.Length
                    });

                    subscriber.Open();

                    using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                    {
                        ResponseMessage response = null;

                        using (ManualResetEvent ev = new ManualResetEvent(false))
                        {
                            rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                            {
                                Data = "Hello, world!"
                            }, TimeSpan.FromSeconds(10), message =>
                            {
                                response = message;

                                ev.Set();
                            });

                            bool waitOne = ev.WaitOne(TimeSpan.FromSeconds(20));

                            if (!waitOne)
                            {
                                Assert.Fail("No response received");
                            }

                            response.ShouldBeEquivalentTo(new ResponseMessage
                            {
                                Code = 13
                            });
                        }
                    }
                }
            }
        }
Exemple #8
0
        public void Bus_MakeRpcCall_NotRoutedToAnySubscriber()
        {
            using (IBus bus = new RabbitMQBus(c => c.SetReceiveSelfPublish()))
            {
                using (IRpcPublisher rpcPublisher = bus.CreateRpcPublisher())
                {
                    try
                    {
                        rpcPublisher.Send <RequestMessage, ResponseMessage>(new RequestMessage
                        {
                            Data = "Hello, world!"
                        }, TimeSpan.FromSeconds(10));

                        Assert.Fail("No exception");
                    }
                    catch (RpcCallException ex)
                    {
                        ex.Reason.Should().Be(RpcFailureReason.NotRouted);
                    }
                }
            }
        }