Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绝地武士有很多订阅者_Java_Redis_Jedis - Fatal编程技术网

Java 绝地武士有很多订阅者

Java 绝地武士有很多订阅者,java,redis,jedis,Java,Redis,Jedis,我正在用java构建一个推送服务器,并计划使用Redis PubSub将发送到客户端的消息排队 现在,我的实现每个设备都有一个redis订户。因此,当设备上线时,它将为其设备订阅redis队列 这个比例合适吗/有更好的方法吗?我将有数千个订户。每个设备的订户应该可以正常工作。我认为伸缩性问题主要围绕您向每个订阅者发布的内容以及消息的实际位置。您可能还需要考虑在某个点运行多个ReDIS实例,可能由ReDIS StimeNee管理,以确保高可用性。Redis Sentinel将在主节点不可用时将您的

我正在用java构建一个推送服务器,并计划使用Redis PubSub将发送到客户端的消息排队

现在,我的实现每个设备都有一个redis订户。因此,当设备上线时,它将为其设备订阅redis队列


这个比例合适吗/有更好的方法吗?我将有数千个订户。

每个设备的订户应该可以正常工作。我认为伸缩性问题主要围绕您向每个订阅者发布的内容以及消息的实际位置。您可能还需要考虑在某个点运行多个ReDIS实例,可能由ReDIS StimeNee管理,以确保高可用性。Redis Sentinel将在主节点不可用时将您的一个从节点Redis实例升级为主节点,然后在主节点恢复后将原始主节点升级回主节点

如果消息对于每个订阅者都是唯一的,那么将消息发送到每个订阅者似乎是一个好方法。请注意,redis中的pub/sub不提供持久性,因此,如果我的订户断开连接或崩溃,或者其他任何情况,然后返回,则自他上次订阅以来发送的所有消息对他都不可用。如果您需要持久性,那么消息可能会进入每个订阅者的列表,在通道上发布的内容应该只是通知客户端新消息可用。然后,订阅者可以在空闲时弹出列表中的任何消息,直到列表为空。此过程将在任何时候在通道上收到通知时重复

如果一条消息正在广播给您的所有或多个客户端,那么您可能应该考虑将消息本身存储在redis密钥、列表或其他内容中,并在每个受影响客户端的频道上发布一条新消息以及在何处(什么密钥)阅读它。您可以使用多种策略来跟踪哪个订阅者阅读了哪些邮件,并删除每个人阅读的旧邮件