protected override async Task OnListenerTaskStartAsync(CancellationToken token) { _token = token; _receiver = new RabbitMQueue(Connection); _receiver.EnsureConnection(); _receiver.EnsureQueue(); _receiverConsumer = new EventingBasicConsumer(_receiver.Channel); _receiverConsumer.Received += (ch, ea) => { var message = new RabbitMessage { CorrelationId = Guid.Parse(ea.BasicProperties.CorrelationId), Properties = ea.BasicProperties, Body = ea.Body }; Task.Run(() => EnqueueMessageToProcessAsync(ProcessingTaskAsync, message)); _receiver.Channel.BasicAck(ea.DeliveryTag, false); }; _receiverConsumerTag = _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer); _monitorTask = Task.Run(MonitorProcess, _token); await token.WhenCanceledAsync().ConfigureAwait(false); if (_receiverConsumerTag != null) { _receiver.Channel.BasicCancel(_receiverConsumerTag); } _receiver.Close(); await _monitorTask.ConfigureAwait(false); }
private async ValueTask CreateReceiverConsumerAsync() { if (_receiverConsumer != null) { return; } if (_receiver is null) { return; } using (await _locker.LockAsync().ConfigureAwait(false)) { if (_receiverConsumer != null) { return; } if (_receiver is null) { return; } await _receiver.EnsureConnectionAsync(5000, int.MaxValue).ConfigureAwait(false); _receiver.EnsureQueue(); _receiverConsumer = new EventingBasicConsumer(_receiver.Channel); _receiverConsumer.Received += MessageReceivedHandler; var rcvName = _receiver.Name; if (!UseSingleResponseQueue) { rcvName += "-" + Core.InstanceIdString; _receiver.Channel.QueueDeclare(rcvName, false, false, true, null); } _receiverConsumerTag = _receiver.Channel.BasicConsume(rcvName, false, _receiverConsumer); Core.Log.LibVerbose("The Receiver for the queue \"{0}\" has been created.", rcvName); } }
/// <inheritdoc /> /// <summary> /// Create a new message queue /// </summary> /// <param name="queue">Message Queue connection instance</param> /// <returns>true if the message queue was created; otherwise, false.</returns> public bool Create(MQConnection queue) { if (Exist(queue)) { return(false); } var rabbitQueue = new RabbitMQueue(queue); if (!rabbitQueue.EnsureConnection()) { return(false); } rabbitQueue.EnsureQueue(); rabbitQueue.EnsureExchange(); rabbitQueue.Close(); return(true); }
/// <inheritdoc /> /// <summary> /// Create a new message queue /// </summary> /// <param name="queue">Message Queue connection instance</param> /// <returns>true if the message queue was created; otherwise, false.</returns> public bool Create(MQConnection queue) { if (Exist(queue)) { return(false); } var rabbitQueue = new RabbitMQueue(queue); if (!rabbitQueue.EnsureConnectionAsync(2000, 100).WaitAndResults()) { return(false); } rabbitQueue.EnsureQueue(); rabbitQueue.EnsureExchange(); rabbitQueue.Close(); return(true); }
private void CreateReceiverConsumer() { if (_receiverConsumer != null) { return; } if (_receiver == null) { return; } lock (_receiver) { if (_receiverConsumer != null) { return; } if (_receiver == null) { return; } _receiver.EnsureConnection(); _receiver.EnsureQueue(); _receiverConsumer = new EventingBasicConsumer(_receiver.Channel); _receiverConsumer.Received += (ch, ea) => { var correlationId = Guid.Parse(ea.BasicProperties.CorrelationId); if (!ReceivedMessages.TryRemove(correlationId, out var message)) { _receiver.Channel.BasicNack(ea.DeliveryTag, false, true); return; } message.CorrelationId = correlationId; message.Body = ea.Body; message.Properties = ea.BasicProperties; message.WaitHandler.Set(); _receiver.Channel.BasicAck(ea.DeliveryTag, false); }; _receiverConsumerTag = _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer); Core.Log.LibVerbose("The Receiver for the queue \"{0}\" has been created.", _receiver.Name); } }
protected override async Task OnListenerTaskStartAsync(CancellationToken token) { _token = token; _receiver = new RabbitMQueue(Connection); await _receiver.EnsureConnectionAsync(5000, int.MaxValue).ConfigureAwait(false); _receiver.EnsureQueue(); _receiverConsumer = new EventingBasicConsumer(_receiver.Channel); _receiverConsumer.Received += MessageReceivedHandler; _receiverConsumerTag = _receiver.Channel.BasicConsume(_receiver.Name, false, _receiverConsumer); _monitorTask = Task.Run(MonitorProcess, _token); await token.WhenCanceledAsync().ConfigureAwait(false); if (_receiverConsumerTag != null) { _receiver.Channel.BasicCancel(_receiverConsumerTag); } _receiver.Close(); await _monitorTask.ConfigureAwait(false); }