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); }
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); }
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; }
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()); }
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); }
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); }
public RetryingInboundTransportDecorator( IInboundTransport inbound, IOutboundTransport outbound, InboundTransportOptions options) { this.inbound = inbound; this.outbound = outbound; this.options = options; }
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); }
void Dispose(bool disposing) { if (_disposed) return; if (disposing) { _inbound.Dispose(); _inbound = null; _outbound.Dispose(); _outbound = null; } _disposed = true; }
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(); }
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(); }
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); }
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); }
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); }
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); } }
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); } }
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; } } } } //} }
public Transport(IInboundTransport inbound, IOutboundTransport outbound) { _inbound = inbound; _outbound = outbound; }