CometD:从外部服务器发布
CometD: publish from external server
我正在尝试了解 CometD 典型用户的用例/架构,看看我是否在正确的轨道上。这是描述我们预期用途的图表。
我们希望 CometD 服务器更多地成为我们 Web 服务的事件 pub/sub,没有内容将通过 CometD,只有事件数据。 Web 服务可以根据他们处理的操作向客户端发布事件,或者它可以从一个长 运行 进程/计划进程中发生。
我的问题基于 Java 客户:
- 这是对 CometD Java 客户端的适当使用吗?从文档看来
例如 Java 客户端用于短期生活应用程序,例如
桌面应用程序。
- 给定 CometD 的 Java 客户端,我们应该使用单个实例还是客户端池来处理从 Web 服务实例向 CometD 发送事件?
- 客户端代码似乎足以处理批处理消息和调用它的多个线程,而且建立一个客户端似乎很昂贵,只在需要发布一条消息时即时执行,对吗?
感谢您的宝贵时间!
是的,这是对 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 服务器上处理该消息(并可能根据某些业务逻辑丰富或删除它)在有机会重新广播或发送给特定客户之前。
我正在尝试了解 CometD 典型用户的用例/架构,看看我是否在正确的轨道上。这是描述我们预期用途的图表。
我们希望 CometD 服务器更多地成为我们 Web 服务的事件 pub/sub,没有内容将通过 CometD,只有事件数据。 Web 服务可以根据他们处理的操作向客户端发布事件,或者它可以从一个长 运行 进程/计划进程中发生。
我的问题基于 Java 客户:
- 这是对 CometD Java 客户端的适当使用吗?从文档看来 例如 Java 客户端用于短期生活应用程序,例如 桌面应用程序。
- 给定 CometD 的 Java 客户端,我们应该使用单个实例还是客户端池来处理从 Web 服务实例向 CometD 发送事件?
- 客户端代码似乎足以处理批处理消息和调用它的多个线程,而且建立一个客户端似乎很昂贵,只在需要发布一条消息时即时执行,对吗?
感谢您的宝贵时间!
是的,这是对 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 服务器上处理该消息(并可能根据某些业务逻辑丰富或删除它)在有机会重新广播或发送给特定客户之前。