EasyNetQ - 从现有队列接收

Ole*_*iev 4 .net c# rabbitmq easynetq

我正在考虑使用 EasyNetQ 与 RabbitMQ 进行交互,并想知道它是否可以支持以下情况:

  1. 使用一些任意参数在外部声明队列(例如 x-message-ttl)
  2. 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。

我发现的可能性是:

  • 简单的 IBus API 要求队列具有默认参数
  • 高级 IAdvancedBus API 允许指定声明队列的参数但不是全部(例如无法设置 x-max-length)

问题是我可以只使用带有自定义参数的现有队列而不需要指定它们吗?

Don*_*nut 5

如果队列已经存在并且您知道它的名称,您不能使用该IAdvancedBus.Consume<T>方法(而不用担心IAdvancedBus.QueueDeclare)吗?

例如:

var queueName = "TheNameOfYourExistingQueue";
var existingQueue = new EasyNetQ.Topology.Queue(queueName, false);

// bus should be an instance of IAdvancedBus
bus.Consume<TypeOfYourMessage>(existingQueue, 
   (msg, info) => 
      {
         // Implement your handling logic here
      });
Run Code Online (Sandbox Code Playgroud)

请注意,EasyNetQ 可能无法自动将消息反序列化为TypeOfYourMessage. 如果是这种情况,一种解决方法是绕过 EasyNetQ 的消息序列化程序,以便您可以直接访问消息的字节数组。Consume如果您想走这条路线,请使用以下重载:

void Consume(IQueue queue, Func<Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);
Run Code Online (Sandbox Code Playgroud)