如何将事件分发到(Wildfly)集群中的所有节点?

How to distribute an event to all nodes in a (Wildfly) cluster?

我想在我的 JavaEE 7 WebApp 中较长的 运行 进程的状态发生变化时通知集群中的所有节点,以便每个节点都可以依次通过 WebSocket 通知其客户端有关那种变化。

我在集群环境中使用 Wildfly 10。

什么 JavaEE 7 API / 编程模型或 Wildfly 服务是当今实现该目标的最佳实践?

如果您想留在 JavaEE 生态系统中,那么 JMS 主题是必经之路。主题就像广播频道——每个订阅它的消息监听器都会得到这个消息的副本。在 wildfly cluster/domain 中,您需要启用 JMS(使用完整配置文件或手动添加消息传递子系统),然后启用集群消息传递,最后创建一个 jms 主题,您的通知客户端将向其中写入消息。您可以在 official wildfly quickstart repo 中找到完整示例 - 查看 helloworld-mdbmessaging-clustering 模块。
您还可以在 java 环境之外使用专用的 PubSub 服务 运行 并让您的应用程序创建某个特定事件的订阅者(例如 Redis 或 Apache camel,..),但 Wildfly 中的消息传递非常简单且适用于大多数用例。