我已经开始使用微服务,并希望启用它们之间的消息发送。 我决定为此使用RawRabbit。
我已经配置了Rabbit,所以两个服务都可以正确连接到我的服务器。一个是发布消息,第二个应该收到此消息。
消息已正确发布,但是我的第二个服务无法接收消息,因为它们具有2个差异交换名称,默认情况下它们是名称空间。 我的意思是服务A在以下位置发布消息:ServiceA.Command交换。 第二种是尝试从ServiceB.CommandHandler.ConcreteHandler交换接收消息。
我的问题是如何在appsettings.json中为两个服务定义交换通用名称?
订阅:
public static IApplicationBuilder Subscribe<T>(this IApplicationBuilder app, IBusClient client)
where T : ICommand
{
if (!(app.ApplicationServices.GetService(typeof(ICommandHandler<T>)) is ICommandHandler<T> handler))
throw new NullReferenceException();
client
.SubscribeAsync<T>(async (msg, context) =>
{
await handler.HandleAsync(msg, CancellationToken.None);
});
return app;
}
public static IApplicationBuilder Subscribe<T>(this IApplicationBuilder app)
where T : ICommand
{
if (!(app.ApplicationServices.GetService(typeof(IBusClient)) is IBusClient busClient))
throw new NullReferenceException();
return Subscribe<T>(app, busClient);
}
应用设置:
"rabbitmq": {
"Username": "rabbitmq",
"Password": "rabbitmq",
"VirtualHost": "/",
"Port": 5671,
"Hostnames": [ "localhost" ],
"RequestTimeout": "00:00:10",
"PublishConfirmTimeout": "00:00:01",
"RecoveryInterval": "00:00:10",
"PersistentDeliveryMode": true,
"AutoCloseConnection": true,
"AutomaticRecovery": true,
"TopologyRecovery": true,
"Exchange": {
"Durable": true,
"AutoDelete": true,
"Type": "Topic",
"Name": "test"
},
"Queue": {
"AutoDelete": true,
"Durable": true,
"Exclusive": true
}
},
参数名不起作用。 两种服务具有相同的配置。