如何在 EasyNetQ 中为每个消费者声明自定义错误交换?
How to declare custom error exchange for each consumer in EasyNetQ?
当发生错误消息时我有四个消费者默认发布消息EasyNetQ_Default_Error_Queue每个队列消费者是否可以写自己的错误交换
例如;
Queue Name : A ErrorExchange :A_ErrorExchange
Queue Name : B ErrorExchange :B_ErrorExchange
bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info => "A_DeadLetter");
bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info2 => "B_DeadLetter");
从您提供的代码来看,您似乎已经大功告成了——您只需要适当地覆盖 ErrorExchangeNamingConvention
和 ErrorQueueNamingConvention
。
例如,这里有一个方法将 return IBus
的一个实例,并覆盖这些约定以合并指定的消费者名称:
public IBus CreateBus(string connectionString, string consumerName)
{
var bus = RabbitHutch.CreateBus(connectionString);
// Modify the following to create your error exchange name appropriately
bus.Advanced.Container.Resolve<IConventions>().ErrorExchangeNamingConvention =
info => consumerName + "_ErrorExchange";
// Modify the following to create your error queue name appropriately
bus.Advanced.Container.Resolve<IConventions>().ErrorQueueNamingConvention =
() => consumerName + "_ErrorQueue";
return bus;
}
当发生错误消息时我有四个消费者默认发布消息EasyNetQ_Default_Error_Queue每个队列消费者是否可以写自己的错误交换
例如;
Queue Name : A ErrorExchange :A_ErrorExchange
Queue Name : B ErrorExchange :B_ErrorExchange
bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info => "A_DeadLetter");
bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info2 => "B_DeadLetter");
从您提供的代码来看,您似乎已经大功告成了——您只需要适当地覆盖 ErrorExchangeNamingConvention
和 ErrorQueueNamingConvention
。
例如,这里有一个方法将 return IBus
的一个实例,并覆盖这些约定以合并指定的消费者名称:
public IBus CreateBus(string connectionString, string consumerName)
{
var bus = RabbitHutch.CreateBus(connectionString);
// Modify the following to create your error exchange name appropriately
bus.Advanced.Container.Resolve<IConventions>().ErrorExchangeNamingConvention =
info => consumerName + "_ErrorExchange";
// Modify the following to create your error queue name appropriately
bus.Advanced.Container.Resolve<IConventions>().ErrorQueueNamingConvention =
() => consumerName + "_ErrorQueue";
return bus;
}