【发布时间】: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