1

我想在 OneWayClientMode 中使用#rebus,同时在代码中配置端点地址,而不是通过 app.config。

这可能吗?我在流畅的配置中找不到它的踪迹。

4

2 回答 2

2

基本上,您有两个选择:1)在发送消息时明确路由消息,2)使用“IDetermineMessageOwnership”实现您自己的路由逻辑

第一个选项非常简单,而且非常明确 - 您可以bus.Advanced.Routing.Send(destination, message)在发送消息时直接前往。您当然应该注意不要对目的地进行太多次硬编码,这可能会导致以后出现问题:)

第二个选项也很简单,但它稍微隐式一些——你可以实现IDetermineMessageOwnership接口,它基本上是一种将消息类型映射到端点的方法,然后让 Rebus 像这样使用它:

Configure.With(...)
    .(...)
    .MessageOwnership(m => m.Use(myImplementation))
    .(...)

除非我只打算做一两个bus.Send,否则我会选择后一个选项 :) 快乐路由!

于 2014-09-16T08:04:53.837 回答
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;
  }
}

希望这可以帮助 ...

于 2015-05-01T18:29:26.980 回答