【问题标题】:How to configure Rebus manualy to use external server如何手动配置 Rebus 以使用外部服务器
【发布时间】:2013-08-07 22:40:47
【问题描述】:

我有一个 Rebus 的 app.config 配置,它可以工作:

<configuration>
  <configSections>
    <section name="rebus" type="Rebus.Configuration.RebusConfigurationSection, Rebus" />
  </configSections>
  <rebus address="192.168.10.100" inputQueue="a.messages" errorQueue="a.error" workers="1" maxRetries="10">
    <endpoints>
      <add messages="ESB_Model" endpoint="a.messages@MyRemoteMachine" />
    </endpoints>
  </rebus>
</configuration>

现在我想在代码而不是配置文件中设置地址和端点:

_adapter = new BuiltinContainerAdapter();

        _bus = Configure.With(_adapter)
            .Logging(l => l.None())
            .Transport(t => t.UseMsmq("a.messages@MyRemoteMachine", "a.error"))
            .MessageOwnership(d => d.FromRebusConfigurationSection())
            .CreateBus()
            .Start();

这不被接受,我不确定如何设置 IP 地址。欢迎任何帮助!

【问题讨论】:

    标签: rebus


    【解决方案1】:

    我可以看到您的代码有几个问题,第一个是这两种配置不等效。

    第二种配置的问题是 Rebus 不允许您使用远程队列作为端点的输入队列。因此,在定义输入队列时不应该使用@-syntax。

    此外,您似乎在混淆某些东西 - a.messages 似乎是您的输入队列,但您似乎也想使用它(授予:在另一台机器上)作为来自 @987654323 的所有消息的所有者@。这可能是正确的,但您似乎有点混淆了它。

    通常,每个端点都应该有自己唯一的输入队列,并且端点应该总是从本地队列接收它们的消息。而且您可能永远不应该让两个端点从同一个队列接收消息。

    最后:除非您真的知道自己在做什么,否则请不要明确指定端点的 IP 地址 - Rebus 将自动使用输入队列和机器名称作为地址 - 例如如果在SomeMachine 上运行的端点a.messages 向另一个端点发送消息,则返回地址将自动设置为a.messages@SomeMachine

    如果您想获得更多灵感,可以查看示例:https://github.com/mookid8000/Rebus/tree/master/samples/Rebus.Samples - pub/sub 示例有一些简单的配置,可以正常工作并且不要过度指定。

    希望能稍微澄清一下 - 如果您需要更多帮助,请告诉我 :)

    【讨论】:

    • 让我稍微解释一下情况。我有 1 个经纪人(服务器)和 5 个工人。代理接收消息并需要将它们分派给工作人员。我希望工作人员在经纪人处订阅某些类型的消息。
    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 2020-09-03
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2013-11-07
    相关资源
    最近更新 更多