Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在EasyNetQ中为每个使用者声明自定义错误交换?_C#_Rabbitmq_Consumer_Easynetq - Fatal编程技术网

C# 如何在EasyNetQ中为每个使用者声明自定义错误交换?

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

发生错误时,我有四个消费者消息发布到默认EasyNetQ_default_error_队列每个队列消费者是否可以写入自己的错误交换

比如,

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;
}