如果队列已经存在并且您知道它的名称,您不能使用该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)