gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:23 26 4
gpt4 key购买 nike

我有一个 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 对话。

到目前为止一切顺利,这就像一个魅力。

但是,我们需要在同一台服务器上设置另一个服务总线实例(它是一个测试服务器,我们在上面有多个分支),现在我遇到了一些问题。

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

<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 -> 保存到另一个数据库

实际发生了什么:

向服务 1 发送消息 -> 服务 1 和服务 2 接收它们并保存在两个数据库中。

有人能给我指出正确的方向吗? :)

最佳答案

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

Rebus 有两种发送消息的基本方式 - 您可以使用 bus.Send 当您希望一个特定的收件人收到消息时,或者您可以使用 bus.Publish当您基本上不关心谁得到它时 :)(您当然确实关心,但是您让关系的订户端成为足够关心 bus.Subscribe 到消息类型)。

在你的例子中,我觉得你想要 bus.Send(yourMessage) 然后,在发件人的 app.config 中,你指定 who owns the message type通过将类型映射到 myFirstQueue

我希望它是有意义的 :) 你不需要乱搞虚拟主机和各种时髦的 Rabbit 设置来完成这项工作,它应该很容易做到,不需要任何额外的配置。

关于c# - Rebus 和 RabbitMQ - 使用 Rebus 的多个独立实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31263038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com