CometD:从外部服务器发布

CometD: publish from external server

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

我们希望 CometD 服务器更多地成为我们 Web 服务的事件 pub/sub,没有内容将通过 CometD,只有事件数据。 Web 服务可以根据他们处理的操作向客户端发布事件,或者它可以从一个长 运行 进程/计划进程中发生。

我的问题基于 Java 客户:

感谢您的宝贵时间!

是的,这是对 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 服务器上处理该消息(并可能根据某些业务逻辑丰富或删除它)在有机会重新广播或发送给特定客户之前。