【问题标题】:EasyNetQ - Consuming message from IAdvanceBus by non generic messageEasyNetQ - 通过非通用消息使用来自 IAdvanceBus 的消息
【发布时间】:2015-08-31 07:32:40
【问题描述】:

是的,我们可以通过此订阅 ID 使用自动订阅功能和普通订阅方法,但此解决方案在 RMQ 队列和交换中有点难看。很难跟踪和分析这些消息。

我使用高级总线并创建了自己的交换和队列。我成功发布了,但消耗部分有点失望。目前,它使用这种方式:

    IAdvanceBus = bus.Advanced.Consume(queueName, registration => 
{
    registration.Add<MESSAGE1>((message, info) => { ProcessMessage(MESSAGE1) }) 
    registration.Add<MESSAGE2>((message, info) => { ProcessMessage(MESSAGE2) }) 
    registration.Add<MESSAGE3>((message, info) => { ProcessMessage(MESSAGE3) }) 
    registration.Add<MESSAGE4>((message, info) => { ProcessMessage(MESSAGE4) }) 
    registration.Add<MESSAGE5>((message, info) => { ProcessMessage(MESSAGE5) });
});

这很好,但如果你有数百个听众,问题会是什么?

我检查了注册类型IHandlerRegistration它只使用了泛型,我们可以有非泛型的方式吗?

喜欢:

    IAdvanceBus = bus.Advanced.Consume(queueName, registration => 
{
    registration.Add(typeof(MESSAGE1), info => { ProcessMessage(MESSAGE1) })    
    registration.Add(typeof(MESSAGE2), info => { ProcessMessage(MESSAGE2) })    
    registration.Add(typeof(MESSAGE3), info => { ProcessMessage(MESSAGE3) })    
});

通过这种方式,我们可以扫描使用此消息的程序集。

另一方面,我通过总线的构造注册:

RabbitHutch.CreateBus(connectionString, registeredServices => {
IEasyNetQLogger logger;
MyCustomHandlerCollection myHandlers = myDIContainer.Resolve<IMyHandlers>();

registeredServices.Register<IHandlerCollection>(s => 
{ 
    logger = s.Resolve<IEasyNetQLogger>();
    return myHandlers;
});
registeredServices.Register<IHandlerRegistration>(s => myHandlers});});

但它不尊重我的注册,因为当我看到来自高级总线消费的代码时:consume code 它是从工厂创建的,而不是从容器中读取的。我相信这是根本原因。

【问题讨论】:

    标签: c# rabbitmq messaging easynetq


    【解决方案1】:

    为了解决这个要求,我使用了 IAdvanceBus 中的这个方法:

    IDisposable Consume(IQueue queue, Func<byte[], MessageProperties, MessageReceivedInfo, Task> onMessage);
    

    我推出了自己的消息调度程序并反序列化队列中的任何消息。集合调度器将确定消息类型并调度到使用反射创建的特定处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多