C# 如何在EasyNetQ中为每个使用者声明自定义错误交换?
发生错误时,我有四个消费者消息发布到默认EasyNetQ_default_error_队列每个队列消费者是否可以写入自己的错误交换 比如,C# 如何在EasyNetQ中为每个使用者声明自定义错误交换?,c#,rabbitmq,consumer,easynetq,C#,Rabbitmq,Consumer,Easynetq,发生错误时,我有四个消费者消息发布到默认EasyNetQ_default_error_队列每个队列消费者是否可以写入自己的错误交换 比如, Queue Name : A ErrorExchange :A_ErrorExchange Queue Name : B ErrorExchange :B_ErrorExchange 从您提供的代码来看,您似乎就快到了--您只需要适当地重写errorExchangeNameConvention和errorQueueNameConvention
Queue Name : A ErrorExchange :A_ErrorExchange
Queue Name : B ErrorExchange :B_ErrorExchange
从您提供的代码来看,您似乎就快到了--您只需要适当地重写
errorExchangeNameConvention
和errorQueueNameConvention
例如,下面是一个方法,该方法将返回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;
}
公共IBus CreateBus(字符串连接字符串、字符串消费者名称)
{
var bus=RabbitHutch.CreateBus(connectionString);
//修改以下内容以适当地创建错误交换名称
bus.Advanced.Container.Resolve().ErrorExchangeNameConvention=
信息=>consumerName+“\u ErrorExchange”;
//修改以下内容以适当地创建错误队列名称
bus.Advanced.Container.Resolve().ErrorQueueNamingConvention=
()=>consumerName+“\u ErrorQueue”;
回程巴士;
}
不幸的是,根据EasyNetQ 6.3.1,ErrorExchangeNameConvention和ErrorQueueNameConvention都更改为只读:(并且在总线创建过程中必须注入命名约定)。
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;
}