首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EasyNetQ -从现有队列接收

EasyNetQ -从现有队列接收
EN

Stack Overflow用户
提问于 2015-05-19 15:36:15
回答 2查看 4.3K关注 0票数 5

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

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

我发现的可能性是:

  • 简单的IBus API要求队列具有默认参数。
  • 高级IAdvancedBus API允许指定声明队列的参数,但不是所有参数(例如,不能设置x-最大长度)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 13:22:17

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

例如:

代码语言:javascript
复制
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

代码语言:javascript
复制
void Consume(IQueue queue, Func<Byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);
票数 6
EN

Stack Overflow用户

发布于 2022-11-30 18:31:01

即使使用解决方案10477404,参数(如isDurable、isExclusive、isAutoDelete和参数)也必须与原始队列声明匹配,以避免创建新的队列声明。

为了安全起见,如果您有方法知道原始队列声明参数,请使用它们创建带有IAdvancedBus.QueueDeclare()IAdvancedBus.QueueDeclareAsync()的队列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30330086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档