gpt4 book ai didi

java - 如何让多个客户倾听同一消费者的声音?

转载 作者:行者123 更新时间:2023-11-30 02:42:26 26 4
gpt4 key购买 nike

例如,生产者 A 在队列/ channel 上向消费者 A 传递一条消息。假设这是一条体育比分。

如何让多个客户端(桌面、移动设备等)监听或连接消费者 A?执行此操作的最佳选择是什么?

我问的问题与底层消息代理无关。

最佳答案

Producer A delivers a message on a queue/channel to Consumer A

在 Apache Kafka 中,我们谈论的是一个“主题”。

My question is more along the lines of "if a taxi cab application had to send a message to all taxi drivers (the same message), let's say 10,000 in a given city, would all taxi drivers be subscribing to the same consumer?

假设我们正在讨论一款所有出租车司机都在使用的 Android 应用。

我的假设:

  1. 我的答案中的“消费者”的意思是一个服务器/节点,它消耗来自某些消息代理的特定队列/主题的消息,例如来自 RabbitMQ 或 Apache Kafka。

  2. 每条消耗的消息都包含一条业务消息,该消息应传递给所有 10 000 名驾驶员,例如“市中心有警察控制”。

  3. 我假设业务消息每天发送多次,因此当司机离线一天时,他在登录后会收到几条消息。

  4. 我假设每个驱动程序(客户端)都有一个唯一的 ID。

  5. 我假设通信是通过 HTTP 进行的,例如每个客户端(10k 辆出租车中的每个应用程序)都在发出 HTTP 请求,例如每 30 秒向服务器检查是否有新消息。请求中提供了客户端的 ID(某些身份验证也是必须的,但这与此处无关)。因此,如果有 10k 个客户端,那么如果所有驱动程序都在线,则平均每秒向服务器发出约 333 个请求。

可能的解决方案:

  1. 服务器消耗所有消息并将它们保存在一些快速存储中,例如memcached 或 redis。

  2. 同时,服务器为所有 10k 驱动程序保存有关特定驱动程序收到的最后一条消息的信息。这也应该存储在一些快速存储中,如上所述。

可能的情况:

假设过去 24 小时内有 20 条消息,每条消息的 ID 为 1 到 20。

  1. ID = 517 的客户端正在向 server.com/message/517 发出 HTTP 请求。
  2. 服务器正在缓存中检查传送给驱动程序 517 的最后一条消息是什么。假设他的最后一条消息是消息 18。
  3. 服务器正在发送驱动程序消息:19 日和 20 日。
  4. 服务器正在缓存中存储驱动程序 517 的最后一条消息是 20。 5。 30 秒后,同一客户端发出下一个请求,但发回的消息为零,因为驱动程序已收到所有消息。

总结

总结一下你需要在机器中存储:

  1. 10,000 名车手中每位车手的进度/位置。
  2. 20 条消息。

这是您正在寻找的答案吗?

关于java - 如何让多个客户倾听同一消费者的声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41252322/

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