Rebus和RabbitMQ——使用多个独立的Rebus实例



我有一个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的另一个实例(它是一个测试服务器,我们在它上面有多个分支),现在我遇到了一些问题。

第二个实例的应用设置如下所示:

<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和service2拾取它们并保存在两个数据库中

谁能给我指个正确的方向?:)

从您的问题中不清楚您是bus.Send消息还是bus.Publish消息-但由于您在配置中调用ManageSubscriptions(),我假设后者…?

Rebus有两种发送消息的基本方式——当你想要一个特定的接收者获得消息时,你可以使用bus.Send,或者当你基本上不在乎谁收到消息时,你可以使用bus.Publish(当然,你确实关心,但是你让关系的订阅者成为足够关心消息类型的bus.Subscribe的一方)。

在你的情况下,听起来像你想要bus.Send(yourMessage),然后,在发送方的app.config中,你通过将类型映射到myFirstQueue来指定谁拥有消息类型。

我希望这是有意义的:)你不应该为了使这个工作而乱用虚拟主机和各种时髦的兔子设置,它应该很容易做到,不需要任何额外的配置。

我可以使用虚拟主机(vhost)来解决它

在RabbitMQ中我添加了两个虚拟主机,bus1和bus2,然后我给了我的用户使用它们的权限。

然后我将connectionstring更改为这个,它像一个魅力一样工作:)

<add key="RabbitMQ.Url" value="amqp://busUser2:password@localhost/bus2"/>

相关内容

  • 没有找到相关文章

最新更新