EasyNetQ - 从现有队列接收
EasyNetQ - receiving from existing queue
我正在考虑使用 EasyNetQ 与 RabbitMQ 进行交互,想知道它是否可以支持以下情况:
- 使用一些任意参数(例如 x-message-ttl)在外部声明队列
- 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。
我发现的可能性是:
- 简单 IBus API 要求队列有默认参数
- Advanced IAdvancedBus API 允许指定声明队列的参数但不是全部(例如 x-max-length 不能设置)
问题是我可以只使用带有自定义参数的现有队列而不需要指定它们吗?
如果队列已经存在并且你知道它的名字,你不能使用 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);
我正在考虑使用 EasyNetQ 与 RabbitMQ 进行交互,想知道它是否可以支持以下情况:
- 使用一些任意参数(例如 x-message-ttl)在外部声明队列
- 使用 EasyNetQ 的客户端代码从该队列发送和接收消息。
我发现的可能性是:
- 简单 IBus API 要求队列有默认参数
- Advanced IAdvancedBus API 允许指定声明队列的参数但不是全部(例如 x-max-length 不能设置)
问题是我可以只使用带有自定义参数的现有队列而不需要指定它们吗?
如果队列已经存在并且你知道它的名字,你不能使用 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);