【问题标题】:Multiple subscribers in NServiceBusNServiceBus 中的多个订阅者
【发布时间】:2011-01-28 14:21:09
【问题描述】:

我开始使用 NServiceBus 并且对 Pubsub 示例有疑问。

我的意图是让 Publisher1 的多个实例运行并接收发布者发送的消息。我还破解了 Publisher,使其仅发送 eventMessage 类型的消息。

但是,如果我启动发布者和订阅者 1 的三个实例,那么一次只有一个实例会收到消息。

这是为什么呢?是配置设置还是其他?

这是我尝试过的,它返回异常“启动端点时出现异常,已记录错误。原因:在配置组件之前无法配置属性。请先调用‘配置’。”:

using NServiceBus;

namespace Subscriber1
{
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Server
    {
    }

    public class OverrideInputQueue : IWantCustomInitialization
    {
        public void Init()
        {
            Configure
                .Instance
                .Configurer
                .ConfigureProperty<NServiceBus.Config.MsmqTransportConfig>(t => t.InputQueue, "testQueue");
        }
    }
}

/J

【问题讨论】:

    标签: nservicebus publish-subscribe


    【解决方案1】:

    你应该使用这个-

    Configure.Instance.Configurer.ConfigureProperty<NServiceBus.Unicast.Transport.Msmq.MsmqTransport>(msmq => msmq.InputQueue, "SomeQueueHere");
    

    确保您使用的是 MsmqTransport 而不是您提到的 MsmqTransportConfig

    【讨论】:

      【解决方案2】:

      NServiceBus 假设每个进程都有一个输入队列。确保您的每个订阅者都配置有唯一的输入队列。如果不是所有三个都将轮询同一个队列,从而产生您所描述的行为。

      为此,您可能必须将粘贴 sub1 复制到 3 个不同的文件夹,修改 app.config 并启动它们。

      希望这会有所帮助!

      【讨论】:

      • 是的。但是我必须以某种方式以编程方式设置队列。正确的??我发现了这样的东西: Configure.Instance.Configurer.ConfigureProperty(t => t.InputQueue, yourDynamicQueue); ..但无法让它工作。有什么建议吗??
      • 是的,如果您无法复制粘贴文件夹并修改单独的 app.config,则必须以编程方式进行设置。看看这里:tech.groups.yahoo.com/group/nservicebus/message/6378 你能详细说明你想通过这一切实现什么吗?如果是关于分配负载,您应该考虑使用分配器:nservicebus.com/Distributor.aspx
      • 我想要的是让同一个客户端的多个实例在某些事件发生时都接收消息。也许当有人创建客户时,所有客户都会收到有关它的消息。
      • 但由于我刚刚开始,可能 pubsub 示例不是此场景的正确“模板”。
      • 您需要在不同于 IConfigureThisEndpoint 类的 IWantCustomInitialization 类中以编程方式设置输入队列。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多