报告竞争消费者方案进展的方法

时间:2014-02-28 07:25:31

标签: nservicebus messaging publish-subscribe rebus

我正在考虑消息传递。目前,我们正在使用Rebus进行一些场景。我们也在考虑NServiceBus。

我们尝试构建的场景是后台任务处理系统的概念验证。今天,我们以不同的方式托管了一些后端服务。 (网络,Windows服务,控制台应用程序)我希望将它们连接到rebus并开始使用竞争消费者消费消息,一些消息将有一个监听器,一些将共享消息的负载。优雅:))

我从另一个问题How should I set rebus up for one producer and many consumers得到了一个很好的开端,它在概念验证方面做得很好。

现在我想开始报告进度。我的初步方法是设置pub / sub并启动一个侦听来自所有服务的进度事件的服务。如果某项服务在未来的特定进展中受到关注,则很容易为消息订阅拦截并开始倾听。

但是,如何设置竞争消费者和发布/订阅者呢?它是两个不同的东西? (在rebus的情况下,使用UseSqlServerInOneWayClientMode / UseSqlServer的一个适配器和使用我们想要的任何协议为pub / sub设置的另一个适配器?)

或者有一个更好的解决方案,然后在这里有两个“公共汽车”?

1 个答案:

答案 0 :(得分:2)

我自己构建了几次这样的东西,使用SignalR报告这种后端工作进程的进展情况,我得到了很好的结果。

我们的设置有一堆WPF客户端,一个SignalR集线器和一堆后端工作进程。然后,所有WPF客户端和所有后端工作人员都将建立与集线器的连接,允许工作人员在工作时发送进度报告。

SignalR有一些很好的属性,使它非常适合这种确切的问题:

  1. 已发布的消息“逃离”Rebus工作单元,允许从单个消息处理程序中多次发送进度报告消息,即使可能需要很长时间才能完成
  2. 很容易将消息一直传递给客户,因为他们直接订阅
  3. 我们可以使用集线器组功能对用户进行分组,以便我们可以在所有用户或单个用户(也可以用于部门等)的后端定位进度/状态消息。
  4. 我想,最重要的一点是,这个进度报告事件(至少在我们的例子中)并不像我们的Rebus消息那么重要,即它不需要相同的可靠性等,我们可以使用它们优势,然后选择一种技术与其他一些很好的属性,结果很酷。