gpt4 book ai didi

activemq - Camel 路由 "to"特定的 websocket 端点

转载 作者:行者123 更新时间:2023-12-01 03:56:59 25 4
gpt4 key购买 nike

我有一些带有 mina sockets 和 jetty websockets 的 Camel 路线。我能够向连接到 websocket 的所有客户端广播一条消息,但如何向特定端点发送消息。我如何使用客户端 ID 作为引用维护所有已连接客户端的列表,以便我可以路由到特定客户端。那可能吗?我可以在 to URI 中提及动态客户端吗?

或者也许我在考虑这个错误,我需要在事件 mq 上创建主题并让客户订阅它。这是否意味着我为每个 websocket 客户端创建一个主题?并将消息路由到正确的主题。

我至少在正确的轨道上,你可以指出任何例子吗?谷歌没有帮助。

最佳答案

您采用的方法取决于客户信息的敏感程度。带有选择器的单个主题的缺点是任何人都可以在没有选择器的情况下订阅该主题并查看每个人的所有信息 - 通常不是您想要做的事情。

更好的方案是使用消息分发机制( Camel 路由集)作为 websocket 客户端和生成消息的系统之间的中介。此机制负责将消息从单个目的地分发到客户端特定的目的地。我曾在几个使用类似方案的银行网络前端工作过。

为了使其工作,您首先为每个用户生成一个不同的 token /UUID;这在 session 建立时呈现给用户(通常通过某种配置文件查询/消息)。
UUID 可以作为 clientId 的散列计算出来,而不是存储在数据库中,这是至关重要的,因为它将一直使用,并且您希望确保快速计算出来。

然后,用户使用该信息连接到使用该 UUID 作为后缀的特定主题。例如,两个用户订阅了一个 orderConfirmation主题将每个订阅该主题的自己的版本:

clientA -> orderConfirmation.71jqsd87162iuhw78162wd7168
clientB -> orderConfirmation.76232hdwe7r23j92irjh291e0d

为了跟踪“存在”,您的客户端需要定期向您的分发机制监听的知名主题发送包含其 clientId 的心跳消息。客户端应该无法订阅此主题以进行读取(请参阅 ActiveMQ Security )。消息分发机制需要在内存中保存一个数据结构,其中包含 clientId 和最后一次看到心跳的时间。

当分发机制接收到消息时,它会检查接收到消息的客户端 ID 是否具有“实时/呈现” session ,确定客户端的 UUID,并在适当的主题上广播消息。

随着时间的推移,这将在您的代理上创建大量主题,您不希望在用户离开时闲逛。您可以将 ActiveMQ 配置为 delete these if they have been inactive for some time .

关于activemq - Camel 路由 "to"特定的 websocket 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16467534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com