EasyNetQ - 从现有队列

时间:2015-05-19 15:36:16

标签: c# .net rabbitmq easynetq

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

  1. 使用一些任意参数(例如x-message-ttl)
  2. 在外部声明队列
  3. 使用EasyNetQ的客户端代码发送和接收来自该队列的消息。
  4. 我找到的可能性是:

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

    问题是我可以将现有队列与自定义参数一起使用而无需指定它们吗?

1 个答案:

答案 0 :(得分:4)

如果队列已存在并且您知道其名称,则无法使用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
      });

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

void Consume(IQueue queue, Func<Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);