我正在考虑使用EasyNetQ与RabbitMQ交互,并想知道它是否可以支持以下情况:
我发现的可能性是:
问题是,我是否可以使用具有自定义参数的现有队列,而不需要指定它们?
发布于 2015-06-10 13:22:17
如果队列已经存在,并且您知道它的名称,那么不能使用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);发布于 2022-11-30 18:31:01
即使使用解决方案10477404,参数(如isDurable、isExclusive、isAutoDelete和参数)也必须与原始队列声明匹配,以避免创建新的队列声明。
为了安全起见,如果您有方法知道原始队列声明参数,请使用它们创建带有IAdvancedBus.QueueDeclare()或IAdvancedBus.QueueDeclareAsync()的队列。
https://stackoverflow.com/questions/30330086
复制相似问题