2

我刚开始玩 nservice bus 并试图让发布工作。我有一个似乎缺少一些消息的听众。它配置有

 <MsmqTransportConfig
  InputQueue="InformMessages"
  ErrorQueue="error"
  NumberOfWorkerThreads="5"
  MaxRetries="5"
 />

有趣的是,如果我将 NumberOfWorkerThreads 设置为 1,它会始终错过所有其他消息。对于较大的值,它似乎不太确定。在我的消息处理程序中,我有

class MessageHandler : IMessageHandler<ICourseRegister>
{
    public void Handle(ICourseRegister message)
    {
        Console.WriteLine("Message dun got gotted");
        Console.WriteLine("Course name is: " + message.CourseName);
    }

    private IBus bus;
    public IBus Bus
    {
        set { this.bus = value; }
    }
}

并且总线配置有

        var bus = NServiceBus.Configure.With()
              .SpringBuilder()
              .XmlSerializer()
              .MsmqTransport()
                  .IsTransactional(true)
                  .PurgeOnStartup(false)
              .UnicastBus()
                  .ImpersonateSender(false)
                  .LoadMessageHandlers()
              .CreateBus()
              .Start();

有什么我需要做的和 Handler 的结束,以便它被释放以准备接收下一条消息或我需要做的一些配置,以便在处理程序忙时有一个客户端队列来保留消息。发送消息之间的时间似乎无关紧要,可能是 20 秒,但侦听器仍然没有收到所有消息。

4

2 回答 2

6

看了你发过来的解决方案后,我明白了问题所在。

您已经为两个进程(发布者和订阅者)指定了相同的输入队列。结果,您的两个进程都在争夺(我认为)您打算只发送给订阅者的消息。

给每个进程自己的输入队列,一切都应该与世界正确:-)

于 2009-11-03T16:29:55.360 回答
0

如果您的工作类似于 pub/sub 示例,您可能会看到“多态订阅”。

在 pub/sub 示例中,发布者交替发布接口 IEvent 和具体类 EventMessage(继承 IEvent)。

如果订阅者订阅了具体类,那么它将不会收到接口消息。对于各种层次结构都是如此,如果您订阅特定类,并且发布者发布其基类类型的消息,则不会分派该消息。

多态订阅则相反。如果您订阅基础,发布者发布的任何子类都将到达。

这与线程无关。

希望有帮助。

于 2009-10-28T20:10:48.167 回答