So konsumieren Sie eine einzigartige Rabbitmq -NachrichtC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 So konsumieren Sie eine einzigartige Rabbitmq -Nachricht

Post by Anonymous »

Ich richte ein Programm für zyklisch ein, um eine Methode aufzurufen, bei der eine einzelne Nachricht von einer Kaninchennachricht -Warteschlange gelesen wird. Es sollte eine Nachricht verbrauchen und verarbeiten und dann aus der Methode zurückkehren.

Code: Select all

public async Task Receive(string custId, string db, ILogger logger)
{
var factory = CreateConnectionFactory();
var connection = await factory.CreateConnectionAsync();
var channel = await connection.CreateChannelAsync();

await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false);

var queue = await QueueDeclareAsync(channel, db);
if (queue.MessageCount is 0) return new Message();

var consumer = new AsyncEventingBasicConsumer(channel);
var messageReceived = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);

var consumerTag = await channel.BasicConsumeAsync(db, autoAck: false, consumer: consumer);
consumer.ReceivedAsync += async (model, ea) =>
{
var body = ea.Body.ToArray();
var receivedMessage = Encoding.UTF8.GetString(body);

await channel.BasicAckAsync(ea.DeliveryTag, multiple: false);
messageReceived.TrySetResult(receivedMessage);

await channel.BasicCancelAsync(consumerTag);
};

var message = await messageReceived.Task;

return await ProcessReceivedMessage(custId, message);
}
< /code>
Ich habe versucht,: < /p>
await channel.BasicQosAsync(prefetchSize: 0, prefetchCount: 1, global: false);
, um es auf eine Nachricht zu begrenzen, aber es scheint nicht zu funktionieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post