CometD:从外部服务器发布

时间:2016-06-15 20:56:48

标签: architecture server external cometd

我正在尝试了解CometD典型用户的用例/架构,看看我是否在正确的轨道上。这是描述我们预期用途的图表。

CometD with web services

我们希望CometD服务器更像是我们的Web服务的事件pub / sub,NO CONTENT将通过CometD,只传递事件数据。 Web服务可以根据客户端处理的操作向客户端发布事件,也可以从长时间运行的进程/调度进程发生。

我的问题基于Java客户端:

  • 这是否适合使用CometD Java客户端?从文档看来 就像Java客户端用于短期生活应用程序一样 桌面应用程序。
  • 鉴于CometD的Java客户端,我们是否应该有一个实例或一个客户端池来处理从Web服务实例向CometD发送事件?
  • 客户端代码看起来很精细,足以处理批处理消息和调用它的多个线程,似乎建立一个客户端只需要在发布一条消息时即时执行它,这是正确的吗?

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

是的,这是适当使用CometD Java客户端。

您可以拥有CometD Java客户端的单个实例,可以安全地使用多线程,或者您可以为每个Web服务使用一个CometD Java客户端,这可能是推荐的方法(正如您在CometD服务器中可以识别的那样)哪个Web服务发送了什么)。

请注意,CometD Java客户端是异步的。

如果您需要回复或确认您发送的消息是由CometD服务器处理的,您需要能够暂停Web服务请求(通过HttpServletRequest.startAsync()或类似),调用CometD Java客户端,当您收到消息确认时,安排完成对客户端的Web服务响应。

您可以使用CometD Java客户端API中的回调获取确认,请参阅CometD Java client API documentation

为完整起见,如果您使用广播频道从Web服务发布消息,则该消息将立即由CometD服务器重新广播到远程客户端。

另一方面,如果您使用服务通道从Web服务发布消息,您将能够在CometD服务器上处理该消息(并且可能在使用某些业务逻辑之后对其进行充实或删除)有机会重新播放或发送给特定的客户。