集群 Websockets Tyrus Java
Clustering Websockets Tyrus Java
我在 Payara Server 上实现了一个集群,其中有 3 个节点(A、B 和 C)作为独立实例。
我使用 HAproxy 作为负载均衡器,一切正常。
我在我的项目中添加了 WebSockets,当客户端请求 websocket 时,HAProxy 会自动从 HTTP 切换到隧道模式。
我的问题是:
无论连接的节点如何,我都需要检索 websocket 会话。例如:
“我有 3 个用户连接到应用程序。用户 1 和用户 2 连接到节点 A。用户 3 是
连接到节点 B。节点 C 上发生事件,需要通知用户 1 和 3。但我没有在 Node C 用户 1 和用户 2 会话上。"
我尝试使用 Hazelcast 分布式列表来存储用户连接的会话(OnOpen 方法)。但是当我在列表中调用 "add" 方法时,这会抛出一个 HazelcastSerializationException 因为 Tyrus 会话对象不是可序列化的。
我该如何解决我的问题?
谢谢
如果您不want-to/can不向您的类添加任何序列化逻辑,请查看 StreamSerializer。
http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#custom-serialization
如果您可以添加序列化逻辑,请查看 IdentifiedDataSerializable:
http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#identifieddataserializable
参考手册中有完整的示例。
您需要确保该对象真的可以被序列化。有些对象不应该被序列化。
我怀疑传输 WebSocket 会话是否对您有帮助,因为您需要从用户连接到的节点通知用户。
您可能想从节点 C 通知节点 A 和 B,以便更新连接到它们的用户。为此,您可以使用 Hazelcast Topic 向集群中的所有节点发送消息,并由具有 WebSocket 会话的节点检索消息 (编辑)。您需要将信息从节点 C 获取到具有会话的其他节点,而不是相反。将会话传递给另一个节点是没有用的,因为会话仅适用于打开的 WebSocket 连接。
(已编辑) 在我建议使用 Hazelcast executor service 而不是主题之前,但这会导致类加载器问题。
我在 Payara Server 上实现了一个集群,其中有 3 个节点(A、B 和 C)作为独立实例。 我使用 HAproxy 作为负载均衡器,一切正常。
我在我的项目中添加了 WebSockets,当客户端请求 websocket 时,HAProxy 会自动从 HTTP 切换到隧道模式。
我的问题是: 无论连接的节点如何,我都需要检索 websocket 会话。例如: “我有 3 个用户连接到应用程序。用户 1 和用户 2 连接到节点 A。用户 3 是 连接到节点 B。节点 C 上发生事件,需要通知用户 1 和 3。但我没有在 Node C 用户 1 和用户 2 会话上。"
我尝试使用 Hazelcast 分布式列表来存储用户连接的会话(OnOpen 方法)。但是当我在列表中调用 "add" 方法时,这会抛出一个 HazelcastSerializationException 因为 Tyrus 会话对象不是可序列化的。
我该如何解决我的问题?
谢谢
如果您不want-to/can不向您的类添加任何序列化逻辑,请查看 StreamSerializer。
http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#custom-serialization
如果您可以添加序列化逻辑,请查看 IdentifiedDataSerializable:
http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#identifieddataserializable
参考手册中有完整的示例。
您需要确保该对象真的可以被序列化。有些对象不应该被序列化。
我怀疑传输 WebSocket 会话是否对您有帮助,因为您需要从用户连接到的节点通知用户。
您可能想从节点 C 通知节点 A 和 B,以便更新连接到它们的用户。为此,您可以使用 Hazelcast Topic 向集群中的所有节点发送消息,并由具有 WebSocket 会话的节点检索消息 (编辑)。您需要将信息从节点 C 获取到具有会话的其他节点,而不是相反。将会话传递给另一个节点是没有用的,因为会话仅适用于打开的 WebSocket 连接。
(已编辑) 在我建议使用 Hazelcast executor service 而不是主题之前,但这会导致类加载器问题。