基本上,我们在 .Net 核心应用程序中使用 MassTransit 和 RabbitMQ 来发布和使用消息。我们在同一台服务器上维护 2 个环境 - 开发环境和演示环境。 为此,我们在 RabbitMQ 中创建了 2 个虚拟主机 dev 和 demo,并将 dev vhost 配置为在 dev 环境中使用,将 demo vhost 配置为在 demo 环境中使用。 当我们运行开发应用程序时,服务总线将启动,并且消息将被正确发布和使用。但在demo中,服务总线没有启动,消息也没有发布和消费。需要帮助找出此问题的解决方案。
例如。 appsettings.json 供开发应用程序使用
“RabbitMqSettings”:{ "Uri": "rabbitmq://localhost/dev", "用户名": "访客", “密码”:“客人” } A 对于演示来说是
“RabbitMqSettings”:{ "Uri": "rabbitmq://localhost/demo", "用户名": "访客", “密码”:“客人” }
在Program.cs中我们有如下配置:
builder.Services.AddMassTransit(mt => mt.AddMassTransit(x => { mt.AddConsumer();
x.UsingRabbitMq((cntxt, cfg) => {
cfg.Host(uri, c => {
c.Username(rabbitMqSettings.UserName);
c.Password(rabbitMqSettings.Password);
});
cfg.ConfigureEndpoints(cntxt);
});
})
);
在开发日志中,我们可以看到以下几行:
2024-04-26 13:34:06.9383|0|INFO|MassTransit|配置的端点 OrderCreated,消费者:OrderAPI.Services.OrderCreatedConsumer 2024-04-26 13:34:07.2920|0|INFO|MassTransit|巴士启动:rabbitmq://localhost/dev
在 Demo 日志中,我们看不到 Bus Started 信息。
2024-04-27 13:34:06.9383|0|INFO|MassTransit|配置的端点 OrderCreated,消费者:OrderAPI.Services.OrderCreatedConsumer
不确定为什么我们没有获取演示的总线启动信息..
有人对此有任何想法吗?请帮忙。
您需要授予用户访问虚拟主机的权限,我猜您没有。
此外,如果您正确配置了 host options,您可以设置
StartTimeout
,之后连接到代理的任何错误都会被记录。
如果 MassTransit 无法连接,您应该在日志中看到一条警告消息,因此,还要检查您的日志。