예제 #1
0
        public static void ShouldContain(this IInboundTransport transport, IMessageSerializer serializer,
                                         Type messageType)
        {
            var future = new Future <bool>();

            transport.Receive(context =>
            {
                context.ShouldNotBeNull();
                context.ShouldBeAnInstanceOf <IReceiveContext>();

                serializer.Deserialize(context);

                if (context.IsContextAvailable(messageType))
                {
                    if (!future.IsCompleted)
                    {
                        future.Complete(true);
                    }
                }

                return(null);
            }, TimeSpan.FromSeconds(8));

            future.IsCompleted.ShouldBeTrue(transport.Address + " should contain a message of type " +
                                            messageType.ToShortTypeName());
        }
예제 #2
0
        public bool Execute()
        {
            Uri uri = _uriString.ToUri("The from URI was invalid");

            IInboundTransport fromTransport = Program.Transports.GetInboundTransport(uri);

            var text = new TextBlock()
                       .BeginBlock("Peek URI: " + uri, "");

            int peekCount = 0;

            fromTransport.Receive(receiveContext =>
            {
                if (peekCount >= _count)
                {
                    return(null);
                }

                var body = Encoding.UTF8.GetString(receiveContext.BodyStream.ReadToEnd());

                text.BeginBlock("MessageId: " + receiveContext.MessageId ?? "", peekCount)
                .Body(body)
                .EndBlock();

                peekCount++;

                return(null);
            }, 5.Seconds());

            _log.Info(text.ToString());

            return(true);
        }
예제 #3
0
        public override bool Execute()
        {
            _log.InfoFormat("Moving messages from '{0}' to '{1}'", _fromUri, _toUri);

            IInboundTransport  fromTransport = GetInboundTransport(_fromUri);
            IOutboundTransport toTransport   = GetOutboundTransport(_toUri);

            int moveCount = 0;

            for (int i = 0; i < _count; i++)
            {
                fromTransport.Receive(receiveContext =>
                {
                    return(context =>
                    {
                        var moveContext = new MoveMessageSendContext(context);

                        toTransport.Send(moveContext);

                        _log.DebugFormat("Moving Message Id: {0}", context.MessageId);

                        moveCount++;
                    });
                }, 5.Seconds());
            }

            _log.InfoFormat("{0} message{1} moved from {2} to {3}", moveCount, moveCount == 1 ? "" : "s", _fromUri, _toUri);

            return(true);
        }
예제 #4
0
        public static void ShouldContain <TMessage>(this IInboundTransport transport, IMessageSerializer serializer)
            where TMessage : class
        {
            var future = new Future <TMessage>();

            transport.Receive(context =>
            {
                context.ShouldNotBeNull();
                context.ShouldBeAnInstanceOf <IReceiveContext>();

                serializer.Deserialize(context);

                IConsumeContext <TMessage> messageContext;
                if (context.TryGetContext(out messageContext))
                {
                    if (!future.IsCompleted)
                    {
                        future.Complete(messageContext.Message);
                    }
                }

                return(null);
            }, TimeSpan.FromSeconds(8));

            future.IsCompleted.ShouldBeTrue(transport.Address + " should contain a message of type " +
                                            typeof(TMessage).Name);
        }
예제 #5
0
        public bool Execute()
        {
            Uri uri = _uriString.ToUri("The URI was invalid");

            IInboundTransport  inboundTransport  = Program.Transports.GetInboundTransport(uri);
            IOutboundTransport outboundTransport = Program.Transports.GetOutboundTransport(uri);

            ITextBlock text = new TextBlock()
                              .BeginBlock("Requeue messages to " + uri, "");


            int requeueCount = 0;

            for (int i = 0; i < _count; i++)
            {
                inboundTransport.Receive(receiveContext =>
                {
                    return(context =>
                    {
                        var moveContext = new MoveMessageSendContext(context);

                        outboundTransport.Send(moveContext);

                        text.BodyFormat("Message-Id: {0}", context.MessageId);

                        requeueCount++;
                    });
                }, 5.Seconds());
            }

            _log.Info(text);
            _log.InfoFormat("{0} message{1} requeued to {2}", requeueCount, requeueCount == 1 ? "" : "s", uri);

            return(true);
        }
예제 #6
0
        public bool Execute()
        {
            Uri fromUri = _fromUriString.ToUri("The from URI was invalid");
            Uri toUri   = _toUriString.ToUri("The to URI was invalid");

            IInboundTransport  fromTransport = Program.Transports.GetTransport(fromUri);
            IOutboundTransport toTransport   = Program.Transports.GetTransport(toUri);

            ITextBlock text = new TextBlock()
                              .BeginBlock("Move messages from " + fromUri + " to " + toUri, "");

            int moveCount = 0;

            for (int i = 0; i < _count; i++)
            {
                fromTransport.Receive(receiveContext =>
                {
                    return(context =>
                    {
                        var moveContext = new MoveMessageSendContext(context);

                        toTransport.Send(moveContext);

                        text.BodyFormat("Message-Id: {0}", context.MessageId);

                        moveCount++;
                    });
                }, TimeSpan.Zero);
            }

            _log.Info(text);
            _log.InfoFormat("{0} message{1} moved from {2} to {3}", moveCount, moveCount == 1 ? "" : "s", fromUri, toUri);

            return(true);
        }
        public void receive_is_called()
        {
            handler.Verify(
                x => x.AddBinding(It.IsAny <ConnectionBinding <AzureServiceBusConnection> >()),
                Times.Never(),
                "hasn't received yet");

            subject.Receive(ctx => c => { }, 1.Seconds());
        }
        public void TransportSendAndReceive()
        {
            using (var management = new RabbitMqEndpointManagement(_queue))
            {
                management.BindQueue(_queue.Name, _exchange.Name, ExchangeType.Fanout, "", null);
            }

            IOutboundTransport t = _factory.BuildOutbound(new TransportSettings(_exchange));
            var context          = new SendContext <string>("dru");

            context.SetBodyWriter(stream =>
            {
                byte[] buffer = Encoding.UTF8.GetBytes(context.Message);
                stream.Write(buffer, 0, buffer.Length);
            });
            t.Send(context);

            IInboundTransport i = _factory.BuildInbound(new TransportSettings(_queue));

            i.Receive(s =>
            {
                return(ss =>
                {
                    string name;
                    using (var stream = new MemoryStream())
                    {
                        ss.CopyBodyTo(stream);

                        name = Encoding.UTF8.GetString(stream.ToArray());
                    }

                    Assert.AreEqual("dru", name);
                    Console.WriteLine(name);
                });
            }, 1.Minutes());
        }
        /// <summary>
        /// May throw a timeout exception if a message with the given id cannot be found.
        /// </summary>
        /// <param name="messageId"></param>
        public void ReturnMessageToSourceQueue(string messageId, IReceiveContext context)
        {
            try
            {
                var query      = context.DestinationAddress.Query;
                var errorQueue = context.DestinationAddress.OriginalString.Replace(query, "") + "_error";

                Uri fromUri = new Uri(errorQueue);
                Uri toUri   = context.DestinationAddress;

                IInboundTransport  fromTransport = Transports.GetInboundTransport(fromUri);
                IOutboundTransport toTransport   = Transports.GetOutboundTransport(toUri);

                fromTransport.Receive(receiveContext =>
                {
                    if (receiveContext.MessageId == messageId)
                    {
                        return(ctx =>
                        {
                            var moveContext = new MoveMessageSendContext(ctx);
                            toTransport.Send(moveContext);
                        });
                    }

                    return(null);
                }, 5.Seconds());

                Console.WriteLine("Success.");
            }
            catch (MessageQueueException ex)
            {
                if (ex.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout)
                {
                    Console.WriteLine(NoMessageFoundErrorFormat, context.Id);

                    foreach (var m in queue.GetAllMessages())
                    {
                        var tm = TransportMessageHeaders.Create(m.Extension);

                        if (tm[""] != null)
                        {
                            //if (messageId != tm[""])
                            //    continue;

                            Console.WriteLine("Found message - going to return to queue.");

                            using (var tx = new TransactionScope())
                            {
                                using (var q = new MessageQueue(new EndpointAddress(tm[""]).Path))
                                    q.Send(m, MessageQueueTransactionType.Automatic);

                                queue.ReceiveByLookupId(MessageLookupAction.Current, m.LookupId,
                                                        MessageQueueTransactionType.Automatic);

                                tx.Complete();
                            }

                            Console.WriteLine("Success.");
                            //scope.Complete();

                            return;
                        }
                    }
                }
            }
            //}
        }