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

sde*_*mir 5 c# rabbitmq consumer easynetq

错误消息发布到默认EasyNetQ_Default_Error_Queue时,我有四个使用者,是否有可能每个队列使用者都编写自己的错误交换

例如;

Queue Name : A    ErrorExchange :A_ErrorExchange
Queue Name : B    ErrorExchange :B_ErrorExchange
Run Code Online (Sandbox Code Playgroud)
bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info => "A_DeadLetter");

bus.Advanced.Conventions.ErrorExchangeNamingConvention = new ErrorExchangeNameConvention(info2 => "B_DeadLetter");
Run Code Online (Sandbox Code Playgroud)

Don*_*nut 6

从您所提供的代码,它看起来像你几乎没有-你只需要重写ErrorExchangeNamingConventionErrorQueueNamingConvention适当的。

举例来说,这是一个方法,该方法将返回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;
}
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,根据 EasyNetQ 6.3.1,ErrorExchangeNamingConvention 和 ErrorQueueNamingConvention 均更改为只读:(并且必须在总线创建期间注入命名约定。 (3认同)