Example #1
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);
        }
Example #2
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);
        }
Example #3
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 LoopbackRabbitMqTransport(IRabbitMqEndpointAddress address, IInboundTransport inbound,
		                                 IOutboundTransport outbound)
		{
			_inbound = inbound;
			_outbound = outbound;
			_address = address;
		}
Example #5
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());
        }
Example #6
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);
        }
Example #7
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);
        }
Example #8
0
 public RetryingInboundTransportDecorator(
     IInboundTransport inbound,
     IOutboundTransport outbound,
     InboundTransportOptions options)
 {
     this.inbound  = inbound;
     this.outbound = outbound;
     this.options  = options;
 }
 public RetryingInboundTransportDecorator(
     IInboundTransport inbound,
     IOutboundTransport outbound,
     InboundTransportOptions options)
 {
     this.inbound = inbound;
     this.outbound = outbound;
     this.options = options;
 }
Example #10
0
        public bool Execute()
        {
            Uri uri = _uriString.ToUri("The from URI was invalid");

            AbsolutePathName fullPath = PathName.GetAbsolutePathName(_name, Environment.CurrentDirectory);

            _log.DebugFormat("Using output path name: {0}", fullPath);

            string directoryName = Path.GetDirectoryName(fullPath.GetPath());

            if (!System.IO.Directory.Exists(directoryName))
            {
                System.IO.Directory.CreateDirectory(directoryName);
            }

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

            ITextBlock text = new TextBlock()
                              .BeginBlock("Save messages from URI: " + uri, "");

            int lastCount;
            int saveCount = 0;

            do
            {
                lastCount = saveCount;

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

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

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

                    WriteMessageToFile(fullPath.ToString(), receiveContext, body);

                    saveCount++;

                    if (_remove)
                    {
                        return context => { }
                    }
                    ;

                    return(null);
                }, 5.Seconds());
            } while (_remove && saveCount < _count && saveCount != lastCount);

            _log.Info(text.ToString());

            return(true);
        }
Example #11
0
		void Dispose(bool disposing)
		{
			if (_disposed) return;
			if (disposing)
			{
				_inbound.Dispose();
				_inbound = null;

				_outbound.Dispose();
				_outbound = null;
			}

			_disposed = true;
		}
Example #12
0
        public IDuplexTransport BuildLoopback(ITransportSettings settings)
        {
            try
            {
                ITransportSettings msmqSettings = new TransportSettings(new MsmqEndpointAddress(settings.Address.Uri), settings);

                IInboundTransport  inboundTransport  = BuildInbound(settings);
                IOutboundTransport outboundTransport = BuildOutbound(settings);

                return(new Transport(msmqSettings.Address, () => inboundTransport, () => outboundTransport));
            }
            catch (Exception ex)
            {
                throw new TransportException(settings.Address.Uri, "Failed to create MSMQ transport", ex);
            }
        }
		public void an_inbound_transport_with_purge_set()
		{
			management = new Mock<AzureManagement>();
			handler = new Mock<ConnectionHandler<ConnectionImpl>>();
			// mock up the actual work that connection handler does
			handler.Setup(x => x.AddBinding(management.Object))
				.Callback(() => management.Object.Bind(null));
			
			subject = new InboundTransportImpl(
				TestDataFactory.GetAddress(),
				handler.Object,
				management.Object);

			// when
			receive_is_called();
		}
Example #14
0
 public Endpoint(EndpointAddress address,
     IInboundTransport inboundTransport,
     IOutboundTransport outboundTransport,
     IOutboundTransport errorTransport,
     IInboundPipeline inboundPipeline,
     IOutboundPipeline outboundPipeline,
     IOutboundPipeline errorPipeline)
 {
     this.address = address;
     this.inboundTransport = inboundTransport;
     this.outboundTransport = outboundTransport;
     this.errorTransport = errorTransport;
     this.inboundPipeline = inboundPipeline;
     this.outboundPipeline = outboundPipeline;
     this.errorPipeline = errorPipeline;
 }
        public void an_inbound_transport_with_purge_set()
        {
            management = new Mock <AzureManagement>();
            handler    = new Mock <ConnectionHandler <AzureServiceBusConnection> >();
            // mock up the actual work that connection handler does
            handler.Setup(x => x.AddBinding(management.Object))
            .Callback(() => management.Object.Bind(null));

            subject = new AzureServiceBusInboundTransport(
                TestDataFactory.GetAddress(),
                handler.Object,
                management.Object);

            // when
            receive_is_called();
        }
Example #16
0
        public override bool Execute()
        {
            if (!Directory.Exists(_destinationPath))
            {
                Directory.CreateDirectory(_destinationPath);
            }

            IInboundTransport fromTransport = GetInboundTransport(_uri);

            _log.InfoFormat("Saving messages from '{0}' to {1}", _uri, _destinationPath);

            int lastCount;
            int saveCount = 0;

            do
            {
                lastCount = saveCount;

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

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

                    _log.DebugFormat("Message-Id: '{0}'", receiveContext.MessageId);

                    WriteMessageToFile(_destinationPath, receiveContext, body);

                    saveCount++;

                    if (_remove)
                    {
                        return context => { }
                    }
                    ;

                    return(null);
                }, 5.Seconds());
            }while (_remove && saveCount < _count && saveCount != lastCount);

            _log.InfoFormat("Saving messages from '{0}' to {1}", _uri, _destinationPath);

            return(true);
        }
Example #17
0
        public MessageWorker(IInboundTransport receiver,
                             IMessageDispatcher messageDispatcher,
                             ILoggerFactory loggerFactory,
                             int concurrencyLevel = 200)
        {
            this.receiver = receiver;
            this.messageDispatcher = messageDispatcher;
            this.logger = loggerFactory.GetLogger(typeof(MessageWorker));
            this.cancellation = new CancellationTokenSource();
            this.concurrencyLevel = concurrencyLevel;

            this.workWaitHandle = new ManualResetEventSlim(true);
            this.workCount = 0;

            this.runningWaitHandle = new ManualResetEventSlim(false);
            this.workerTask = Task.Factory.StartNew(async () => await this.Work(), TaskCreationOptions.LongRunning);
        }
Example #18
0
        public MessageWorker(IInboundTransport receiver,
                             IMessageDispatcher messageDispatcher,
                             ILoggerFactory loggerFactory,
                             int concurrencyLevel = 200)
        {
            this.receiver          = receiver;
            this.messageDispatcher = messageDispatcher;
            this.logger            = loggerFactory.GetLogger(typeof(MessageWorker));
            this.cancellation      = new CancellationTokenSource();
            this.concurrencyLevel  = concurrencyLevel;

            this.workWaitHandle = new ManualResetEventSlim(true);
            this.workCount      = 0;

            this.runningWaitHandle = new ManualResetEventSlim(false);
            this.workerTask        = Task.Factory.StartNew(async() => await this.Work(), TaskCreationOptions.LongRunning);
        }
Example #19
0
        public IDuplexTransport BuildLoopback(ITransportSettings settings)
        {
            try
            {
                var msmqEndpointAddress        = new MsmqEndpointAddress(settings.Address.Uri, settings.Transactional, _defaultRecoverable);
                TransportSettings msmqSettings = GetTransportSettings(settings, msmqEndpointAddress);

                IInboundTransport  inboundTransport  = BuildInbound(settings);
                IOutboundTransport outboundTransport = BuildOutbound(settings);

                return(new Transport(msmqSettings.Address, () => inboundTransport, () => outboundTransport));
            }
            catch (Exception ex)
            {
                throw new TransportException(settings.Address.Uri, "Failed to create MSMQ transport", ex);
            }
        }
Example #20
0
        public IDuplexTransport BuildLoopback(ITransportSettings settings)
        {
            try
            {
                if (settings.Transactional)
                {
                    throw new TransportException(settings.Address.Uri, "Transactional support is not available for csharp-sqlite");
                }

                IInboundTransport  inboundTransport  = BuildInbound(settings);
                IOutboundTransport outboundTransport = BuildOutbound(settings);

                return(new Transport(settings.Address, () => inboundTransport, () => outboundTransport));
            }
            catch (Exception ex)
            {
                throw new TransportException(settings.Address.Uri, "Failed to create SqlLite transport", ex);
            }
        }
Example #21
0
        void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }
            if (disposing)
            {
                if (_inbound != null)
                {
                    _inbound.Dispose();
                    _inbound = null;
                }

                if (_outbound != null)
                {
                    _outbound.Dispose();
                    _outbound = null;
                }
            }

            _disposed = true;
        }
        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;
                        }
                    }
                }
            }
            //}
        }
Example #24
0
		public Transport(IInboundTransport inbound, IOutboundTransport outbound)
		{
			_inbound = inbound;
			_outbound = outbound;
		}