是的,我们可以通过这个订阅 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});});
但它不尊重我的注册,因为当我看到高级总线消耗的代码时:消耗它从工厂创建的代码而不是从容器中读取的代码。我相信这是一个根本原因。