首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rebus和RabbitMQ -使用Rebus的多个独立实例?

Rebus和RabbitMQ -使用Rebus的多个独立实例?
EN

Stack Overflow用户
提问于 2015-07-07 08:05:12
回答 2查看 2.6K关注 0票数 2

我让一个Rebus Servicebus控制台应用程序作为windows服务在我的测试环境中运行。服务总线的创建方式如下:

代码语言:javascript
复制
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();

应用程序设置如下所示:

代码语言:javascript
复制
<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实例(它是一个测试服务器,并且在它上有多个分支),现在我遇到了一些问题。

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

代码语言:javascript
复制
<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发送消息,将它们取出来并保存在两个数据库中。

谁能帮我指出正确的方向吗?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 08:27:09

我能够使用虚拟主机(Vhost)来解决这个问题。

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

然后,我将连接字符串更改为这个,它就像一种魅力:)

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

票数 1
EN

Stack Overflow用户

发布于 2015-07-07 14:27:21

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

Rebus有两种发送消息的基本方式--当您想要一个特定的收件人获取消息时,您可以使用bus.Send,或者当您根本不关心谁得到消息时,您可以使用bus.Publish :) (当然可以,但是您让关系的订阅者非常关心消息类型的bus.Subscribe )。

在您的例子中,我认为您想要bus.Send(yourMessage),然后在发送方的app.config中,通过将类型映射到myFirstQueue来指定谁拥有消息类型?

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31263038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档