我想在OneWayClientMode中使用#rebus,同时在代码中配置端点地址,而不是通过app.config。
这可能吗?我在流畅的配置中找不到任何痕迹。
答案 0 :(得分:2)
基本上,您有两种选择:1)在发送消息时明确路由消息,2)使用“IDetermineMessageOwnership”实现您自己的路由逻辑
第一个选项非常简单,非常明确 - 只要发送邮件,您就可以转到bus.Advanced.Routing.Send(destination, message)
。您当然应该注意不要对目的地进行太多次硬编码,这可能会导致以后出现问题:)
第二个选项也很简单,但稍微隐含一点 - 你可以实现IDetermineMessageOwnership
接口,这基本上是一种将消息类型映射到端点的方法,然后让Rebus像这样使用它:
Configure.With(...)
.(...)
.MessageOwnership(m => m.Use(myImplementation))
.(...)
除非我只打算做一两个bus.Send
,否则我会选择后一个选项:)快乐路由!
答案 1 :(得分:2)
我想提供选项2的更明确的示例,因为我必须搜索示例以了解如何键入" myImplementation",这非常简单。假设您希望sWorkerId标识的队列接收所有消息,这就是您要做的:
Configure.With(...
.MessageOwnership(o => o.Use(new RebusConfig(sWorkerId)))
.CreateBus()
.Start(RebusConfig.NumberOfWorkers)
RebusConfig将IDetermineMessageOwnership实现为:
public class RebusConfig : IDetermineMessageOwnership
{
private string m_sWorkerRoleEndpoint;
public RebusConfig(string sWorkerRoleEndpointId)
{
m_sWorkerRoleEndpoint = sWorkerRoleEndpointId;
}
public string GetEndpointFor(Type messageType)
{
return m_sWorkerRoleEndpoint;
}
}
希望这会有所帮助......