Как предотвратить удаление очереди?C#

Место общения программистов C#
Ответить
Anonymous
 Как предотвратить удаление очереди?

Сообщение Anonymous »

Я новичок в Rabbitmq, и у меня проблемы с удалкой моей очереди. Я не хочу, чтобы что -то было удалено автоматически. Я установил очередь, чтобы не удалять, но каждый раз, когда я запускаю приложение, очередь удаляется на выходе. Так что, если приемное приложение сбоятся, оно может просто перезапустить и получить пропущенные сообщения. Fanout - это не вариант, так как я хочу, чтобы каждый клиент имел возможность получить только «тему», которую они хотят, а не каждую беспорядка. Документы Rabbitmq все говорят, что Auto Delete = false должен сделать это.using RabbitMQ.Client;
using System.Text;

var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = await factory.CreateConnectionAsync();
using var channel = await connection.CreateChannelAsync();

await channel.ExchangeDeclareAsync(exchange: "BeatS", type: ExchangeType.Topic, durable: true, autoDelete: false);

var routingKey = (args.Length > 0) ? args[0] : "Updated";
var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!";
var body = Encoding.UTF8.GetBytes(message);
await channel.BasicPublishAsync(exchange: "BeatS", routingKey: routingKey, body: body);
Console.WriteLine($" [x] Sent '{routingKey}':'{message}'");
Console.Read();
< /code>
Я отлично работает. Отправляет сообщение. < /P>
Вот получение: < /p>
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Text;

var factory = new ConnectionFactory { HostName = "localhost" };

using var connection = await factory.CreateConnectionAsync();
using var channel = await connection.CreateChannelAsync();

await channel.ExchangeDeclareAsync(exchange: "BeatS", type: ExchangeType.Topic, durable:true, autoDelete:false);

// declare a server-named queue
QueueDeclareOk queueDeclareResult = await channel.QueueDeclareAsync(autoDelete:false,durable:true);
string queueName = queueDeclareResult.QueueName;

await channel.QueueBindAsync(queue: queueName, exchange: "BeatS", routingKey: "Updated");

Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C");

var consumer = new AsyncEventingBasicConsumer(channel);
consumer.ReceivedAsync += (model, ea) =>
{
var body = ea.Body.ToArray();
var message = Encoding.UTF8.GetString(body);
var routingKey = ea.RoutingKey;
Console.WriteLine($" [x] Received '{routingKey}':'{message}'");
return Task.CompletedTask;
};

await channel.BasicConsumeAsync(queueName, autoAck: true, consumer: consumer);

Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
< /code>
отлично работает. Может получить сообщения. Но как только приложение приема закрыта, очередь удалена, хотя в коде говорится, что оно не должно быть. Та же команда перечисляет 0 очередей после закрытия приложения.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ng-deleted
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»