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

我想知道是否可以在同一台服务器上运行多个 MassTransmit 或 RabbitMQ 实例。基本上我们有一个在 RabbitMQ 之上使用 MassTransmit 的 .net 应用程序。不幸的是,我们的许多客户在同一台服务器上运行实时和测试环境,因此为了部署到现实世界,我们需要一种拥有多个实例或能够在实时和测试之间隔离消息的方法。

我可以在所有消息中包含一个标头,并且每个消费者在使用消息之前检查是否存在正确的标头(例如标头具有“实时”或“测试”。)显然,这意味着从所有实例接收到的所有消息,无论它们是是否适合他们,这远非理想。

理想情况下,我希望能够在客户端站点上以最少的设置执行某些操作,例如每个环境的虚拟子实例或目录。


桃花长相依
浏览 105回答 1
1回答

一只萌萌小番薯

有两种方法可以解决此问题。第一种方法是最明显的 - 您需要使用虚拟主机。从文档中:虚拟主机提供资源的逻辑分组和分离。物理资源的分离不是虚拟主机的目标,应被视为实现细节。在您的 RMQ 实例中创建两个虚拟主机,名为test和prod,您在 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
打开App,查看更多内容
随时随地看视频慕课网APP