如果隊列已經存在並且您知道它的名字,那麼您是否可以使用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);