public RabbitMQTaskQueueRequestChannel(BindingContext context, ChannelManagerBase channelManager, EndpointAddress remoteAddress, Uri via, BufferManager bufferManger, RabbitMQTaskQueueBinding binding) : base(context, channelManager, binding, new EndpointAddress(RabbitMQTaskQueueUri.Create(remoteAddress.Uri.Host, remoteAddress.Uri.Port, $"r{Guid.NewGuid():N}"))) { MethodInvocationTrace.Write(); RemoteAddress = remoteAddress; _bufferMgr = bufferManger; _requestFunc = Request; Via = via; RemoteUri = new RabbitMQTaskQueueUri(remoteAddress.Uri.ToString()); }
protected RabbitMQTaskQueueDuplexChannelBase(BindingContext context, ChannelManagerBase channelManager, RabbitMQTaskQueueBinding binding, EndpointAddress remoteAddress, EndpointAddress localAddress) : base(context, channelManager, binding, localAddress) { MethodInvocationTrace.Write(); _tryReceiveMethod = TryReceive; _receiveFunc = Receive; _waitForMsgFunc = WaitForMessage; _sendFunc = Send; _remoteAddress = remoteAddress; _closeOutputSessionFunc = CloseOutputSession; _remoteUri = (remoteAddress.Uri == EndpointAddress.AnonymousUri) ? null : new RabbitMQTaskQueueUri(remoteAddress.Uri.ToString()); }
protected override void OnOpen(TimeSpan timeout) { MethodInvocationTrace.Write(); var timeoutTimer = TimeoutTimer.StartNew(timeout); base.OnOpen(timeoutTimer.RemainingTime); var connFactory = Binding.CreateConnectionFactory(RemoteAddress.Uri.Host, RemoteAddress.Uri.Port); var localAddress = new RabbitMQTaskQueueUri(LocalAddress.Uri.ToString()); var setup = new RabbitMQReaderSetup { CancelToken = ConcurrentOperationManager.Token, ConnectionFactory = connFactory, DeleteQueueOnClose = true, Exchange = Binding.Exchange, IsDurable = Binding.IsDurable, MaxPriority = Binding.MaxPriority, Options = Binding.ReaderOptions, QueueName = localAddress.QueueName, QueueTimeToLive = Binding.ReplyQueueTimeToLive, Timeout = timeoutTimer.RemainingTime, }; setup.QueueArguments = new Dictionary<string, object>(); setup.QueueArguments.Add(TaskQueueReaderQueueArguments.IsTaskInputQueue, false); setup.QueueArguments.Add(TaskQueueReaderQueueArguments.Scheme, Constants.Scheme); _queueReader = Binding.QueueReaderWriterFactory.CreateReader(setup); }
public override void Reply(Message message, TimeSpan timeout) { MethodInvocationTrace.Write(); var timeoutTimer = TimeoutTimer.StartNew(timeout); using (_opMgr.TrackOperation()) { if (_binding.MessageConfirmationMode == MessageConfirmationModes.BeforeReply) { _queueReader.AcknowledgeMessage(_deliveryTag, TimeSpan.MaxValue, CancellationToken.None); } if (message == null) { _replySent = true; return; } var remoteAddress = new RabbitMQTaskQueueUri(RequestMessage.Headers.ReplyTo.Uri.ToString()); message.Headers.From = _replyToAddress; message.Headers.ReplyTo = _replyToAddress; message.Headers.MessageId = new UniqueId(); _queueWriter.Enqueue(_binding.Exchange, remoteAddress.QueueName, message, _bufferMgr, _binding, _msgEncoderFactory, TimeSpan.MaxValue, timeoutTimer.RemainingTime, _opMgr.Token); _replySent = true; } }