NServiceBus - 获取队列中的所有待处理消息

时间:2011-03-31 21:16:57

标签: c# .net nservicebus

我有一个应用程序,它通过WCF从许多其他应用程序接收数据。

我现在有客户也希望收到该数据的副本,但不同的客户有不同的需求。

  • 客户A希望我们拨打网络服务向他发送数据
  • 客户B希望我们通过电子邮件向他发送数据
  • 客户C希望建立自己的系统,该系统将轮询我提供的用于接收其数据的Web服务。

我一直想要使用NServiceBus很长一段时间,看起来这是一个很好的应用程序。我认为通过设置端点以便以所需的格式/协议向他们提供数据,我可以很好地处理客户A和B.但客户C,我正在努力。

我在NService总线上看到的所有样本都涉及订阅队列并在消息进入时触发事件。我想我想要做的是当客户打电话给他的数据时,我会抓住队列中的所有消息都是为他提供的。

我的问题是,这是NServiceBus的正确应用还是这个工作的错误工具?如果是这样,那里是否有任何代码样本可以告诉我如何处理客户C?

2 个答案:

答案 0 :(得分:3)

这是一个很好的问题,因为它切入了基于消息的系统的核心 - 特别是NServiceBus如何能够解决很多痛苦。

您肯定会朝着A和B的正确方向前进 - 只需订阅相应的消息,然后使用他们选择的机制将数据转发/推送给您的客户。如果它们脱机,没什么大不了的,基于消息的系统比其他系统更优雅地处理故障。

有趣的是,客户C可以几乎与A和B完全相同的方式提供服务,但需要一些额外的步骤。首先,只需设置另一个订阅相应消息的NSB端点,然后使用客户C指示的所需结构将它们写入持久存储。您可以将消息写入本地数据库,JSON文件,甚至亚马逊S3 blob。从那里你只需要设置某种HTTP端点(不使用NServiceBus),允许客户查询和检索适当的数据。如果您正在使用S3并发布JSON blob,您甚至可能不需要设置HTTP服务器 - 只需让Amazon完成所有工作。

另一个非常酷的副作用是,如果未来的客户D和E决定他们也想要轮询,但他们需要彼此略有不同的格式和客户C,您可以通过设置另一个处理程序来容纳它们根据他们指定的格式写出文件(或数据库插入) - 所有这些都不会改变系统的行为。

答案 1 :(得分:0)

可以通过WCF公开端点,但这用于将消息传递到总线上。如果有人想要轮询服务,我会单独托管它,让它们在被调用时进行管理。