我有一个 Rebus Servicebus 控制台应用程序在我的测试环境中作为 Windows 服务运行。服务总线是这样创建的:
Bus = Configure.With(adapter)
.Logging(l => l.Log4Net())
.Transport(
t => t.UseRabbitMq(ConfigurationManager.AppSettings["RabbitMQ.Url"],
ConfigurationManager.AppSettings["RabbitMQ.Queue"],
ConfigurationManager.AppSettings["RabbitMQ.ErrorQueue"])
.ManageSubscriptions())
.MessageOwnership(d => d.FromRebusConfigurationSection())
.Sagas(s => s.Use(new RavenDbSagaPersister(sagaDocumentStore)))
.Timeouts(t => t.Use(new RavenDbTimeoutStorage(sagaDocumentStore)))
.CreateBus().Start();
应用程序设置如下所示:
<add key="RabbitMQ.Url" value="amqp://rabbitUser:password@localhost"/>
<add key="RabbitMQ.Queue" value="myFirstQueue"/>
<add key="RabbitMQ.ErrorQueue" value="myFirstQueue.error" />
如您所见,它正在与 RabbitMQ @localhost 交谈。
到目前为止一切顺利,这就像一个魅力。
但是,我们需要在同一台服务器上设置另一个 Servicebus 实例(它是一个测试服务器,我们有多个分支),现在我遇到了一些问题。
第二个实例的 appsettings 如下所示:
<add key="RabbitMQ.Url" value="amqp://rabbitUser:password@localhost"/>
<add key="RabbitMQ.Queue" value="mySecondQueue"/>
<add key="RabbitMQ.ErrorQueue" value="mySecondQueue.error" />
当我开始向第一个服务发送消息时,我可以看到它们也被第二个服务接收,我认为这是因为它们使用相同的 RabbitMQ 实例@localhost?
我不是服务总线专家,我认为只使用不同的队列就可以解决这个问题,但事实并非如此。
我读过一些关于虚拟主机的东西,这是要走的路吗?
我想做的事:
向 service1 发送消息 -> 保存到特定数据库
向 service2 发送消息 -> 保存到另一个数据库
实际发生的情况:
将消息发送到 service1 -> service1 AND service2 将它们拾取并保存在两个数据库中。
有人可以指出我正确的方向吗?:)