如何手动配置Rebus以使用外部服务器

时间:2013-08-07 06:56:18

标签: rebus

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

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

_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地址。欢迎任何帮助!

1 个答案:

答案 0 :(得分:1)

我可以看到您的代码存在一些问题,首先是两个配置不相等。

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

此外,似乎你正在混淆一些东西 - a.messages似乎是你的输入队列,但似乎你想要使用它(在另一台机器上授予)作为所有消息的所有者ESB_Model。这可能是正确的,但似乎你正在混合它。

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

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

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

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