gpt4 book ai didi

rebus - 一个 rebus 进程中的多个输入队列

转载 作者:行者123 更新时间:2023-12-01 08:57:28 25 4
gpt4 key购买 nike

我正在使用 top-shelf 和 rebus 编写一个“多 worker ”应用程序。

我的想法是使用 MyWorker1Namespace - MyWorker1Namespace.Messages , MyWorker2Namespace - MyWorker2Namespace.Messages图案。

我想在不跨越多个进程的情况下运行应用程序,相反,我想使用多个输入队列配置应用程序,以便准备好在必要时将其拆分为多个进程。

有没有办法使用 Rebus 在一个应用程序中声明多个输入队列和多个工作线程?

我想配置应该是这样的:

<rebus inputQueue="MyWorker1Namespace.input" errorQueue="MyWorker1Namespace.error" workers="1" maxRetries="5"> </rebus>
<rebus inputQueue="MyWorker2Namespace.input" errorQueue="MyWorker2Namespace.error" workers="1" maxRetries="5"> </rebus>
...

最佳答案

由于 Rebus app.config XML 是针对每个进程一个总线实例的场景进行了优化,因此您不能完全在 XML 中配置多个总线,但是没有什么可以阻止您在同一进程中启动多个总线实例。

我经常这样做,例如在 Azure 辅助角色中,我希望托管多个逻辑端点,而不会产生物理分离部署的成本,有时我也使用 Topshelf 托管的 Windows 服务来完成。

通常,我的 app.config 以以下 XML 结尾:

<rebus workers="1">
<add messages="SomeAssembly.Messages" endpoint="someEndpoint.input"/>
<add messages="AnotherAssembly.Messages" endpoint="anotherEndpoint.input"/>
</rebus>

因此,我可以一劳永逸地配置每条总线的默认工作人员数量和端点映射。然后,当我的应用程序启动时,它会在应用程序生命周期内为每条总线保留一个 IoC 容器 - 对于 Windsor,我通常最终会得到一个具有队列名称参数的通用总线安装程序,这允许我配置 Windsor像这样:
var containers = new List<IWindsorContainer> {
new WindsorContainer()
// always handlers first
.Install(FromAssembly.Containing<SomeEndpoint.SomeHandler>())

// and then the bus, which gets started at this point
.Install(new RebusInstaller("someEndpoint.input", "error"))

// and then e.g. background timers and other "living things"
.Install(new PeriodicTimersInstannce()),

new WindsorContainer()
.Install(FromAssembly.Containing<AnotherEndpoint.AnotherHandler>())
.Install(new RebusInstaller("anotherEndpoint.input", "error"))
};

// and then remember to dispose each container when shutting down the process

哪里 RebusInstaller (这是一种 Windsor 机制)基本上只是将具有正确队列名称的总线放入容器中,例如像这样:
Configure.With(new WindsorContainerAdapter(container))
.Transport(t => t.UseMsmq(_inputQueueName, _errorQueueName))
.(...) etc
.CreateBus().Start();

我喜欢每个 IoC 容器实例作为一个逻辑上独立的应用程序本身的想法。这样一来,如果您想在将来的某个时间将事情分开,就很容易了。能够独立部署您的端点。

我希望这能为您提供一些启发:) 请不要犹豫,询问您是否需要更多指示。

关于rebus - 一个 rebus 进程中的多个输入队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145670/

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