我有一个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地址。欢迎任何帮助!
答案 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 - 发布/订阅示例包含一些工作正常并且不会过度指定的简单配置。
希望稍微澄清一下 - 如果您需要更多帮助,请告诉我们。)