为了账号安全,请及时绑定邮箱和手机立即绑定

MassTransmit/RabbitMQ 在同一台机器上有多个不同的实例

MassTransmit/RabbitMQ 在同一台机器上有多个不同的实例

C#
桃花长相依 2023-07-09 17:43:44
我想知道是否可以在同一台服务器上运行多个 MassTransmit 或 RabbitMQ 实例。基本上我们有一个在 RabbitMQ 之上使用 MassTransmit 的 .net 应用程序。不幸的是,我们的许多客户在同一台服务器上运行实时和测试环境,因此为了部署到现实世界,我们需要一种拥有多个实例或能够在实时和测试之间隔离消息的方法。我可以在所有消息中包含一个标头,并且每个消费者在使用消息之前检查是否存在正确的标头(例如标头具有“实时”或“测试”。)显然,这意味着从所有实例接收到的所有消息,无论它们是是否适合他们,这远非理想。理想情况下,我希望能够在客户端站点上以最少的设置执行某些操作,例如每个环境的虚拟子实例或目录。
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

有两种方法可以解决此问题。

第一种方法是最明显的 - 您需要使用虚拟主机。

从文档中:

虚拟主机提供资源的逻辑分组和分离。物理资源的分离不是虚拟主机的目标,应被视为实现细节。

在您的 RMQ 实例中创建两个虚拟主机,名为testprod,您在 MassTransit 端唯一需要做的就是更改 RMQ 连接字符串:

Bus.Factory.CreateUsingRabbitMq(cfg =>

{

    cfg.Host(new Uri("rabbitmq://localhost/test"), host =>

    {

        host.Username("username");

        host.Password("password");

    });

}); 

所以您将用于rabbitmq://localhost/prod生产。当然,这些值不应该是硬编码的,而是来自配置。


我相信虚拟主机完全可以满足您的需求。


如果你确实需要完全独立地运行测试环境,你可以在 Docker 容器中运行它。当您需要一个干净的环境时,此选项将使您能够杀死整个事情并从头开始。您可以轻松地重新映射默认端口,以避免与生产实例发生冲突:


docker run -d --name test-rmq -p 5673:5672 -p 8080:15672 rabbitmq:3-management

如果您运行上面的命令,则可以通过 AMQP on 访问新实例localhost:5673,并且管理插件将打开http://localhost:8080


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信