5

当发生错误时,我有四个消费者将消息发布到默认 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");
4

1 回答 1

7

从您提供的代码来看,您似乎就快到了——您只需要适当地覆盖ErrorExchangeNamingConvention即可ErrorQueueNamingConvention

例如,下面的方法将返回一个实例,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;
}
于 2015-06-05T13:32:56.190 回答