java—如何让多个客户机监听同一个消费者?

qrjkbowd  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(388)

例如,生产者a将队列/通道上的消息传递给消费者a。假设这是一个体育比分。
如何让多个客户端(台式机、移动设备等)监听或连接到消费者?这样做的最佳选择是什么?
我向底层的消息代理提出了一个不可知的问题。

y1aodyip

y1aodyip1#

如果您使用的是web/servlet容器,那么可以使用pub/subjms。
或者现在有一天你可以看到网络套接字,这可以为你提供全双工通信。。在internet上搜索web套接字。。

njthzxwz

njthzxwz2#

Kafka有一个消费者群体的概念,如果你有一个主题a和3个消费者a1、b1、c1,并且你想创建发送到主题a的消息的副本,然后发送到a1、b1和c1,然后用3个不同的消费者群体启动3个消费者。
请看kafka在javaworld上的文章,了解有关消费群体的详细信息

8ljdwjyq

8ljdwjyq3#

生产者a将队列/通道上的消息传递给消费者a
在Apache·Kafka中,我们谈论的是一个“主题”。
我的问题更像是“如果一个出租车应用程序必须向所有出租车司机发送一条消息(相同的消息),比如说在一个给定的城市有10000条消息,那么所有出租车司机会订阅同一个消费者吗?
假设我们正在讨论一个所有出租车司机都在使用的android应用程序。
我的假设:
我在回答中所说的“消费者”是指一个服务器/节点,它使用来自某个消息代理(例如来自rabbitmq或apachekafka)的特定队列/主题的消息。
每条消息都包含一条业务消息,应发送给所有10000名驾驶员,例如“市中心有警察控制”。
我假设一天要发送几次业务消息,所以当一个驱动程序离线一天时,他会在登录后收到几条消息。
我假设每个驱动程序(客户机)都有一个唯一的id。
我假设通信是通过http进行的,例如每个客户端(10k出租车中的每个应用程序)都会向服务器发出http请求,例如每30秒一次,以检查是否有一些新消息。请求中提供了客户机的id(一些身份验证也是必须的,但这与此无关)。因此,如果有10k个客户机,那么如果所有驱动程序都在线,平均每秒大约有333个请求发送到服务器。
可能的解决方案:
服务器消耗所有消息并将它们保存在一些快速存储中,例如memcached或redis。
同时,服务器为所有10k驱动程序保留有关特定驱动程序收到的最后一条消息的信息。这也应该存储在一些快速存储中,如上所述。
可能的情况:
假设在过去24小时内有20条消息,每条消息都有一个从1到20的id。
id=517的客户端正在向server.com/message/517发出http请求。
服务器正在高速缓存中检查传递到驱动程序517的最后一条消息是什么。假设他最后一条信息是第18条。
服务器正在发送驱动程序消息:19和20。
服务器正在高速缓存中存储驱动程序517的最后一条消息是20。5例如,30秒后,同一客户机发出下一个请求,但由于驱动程序已接收到所有消息,因此未发回任何消息。
总结
总之,您需要在机器中存储:
每名10公里车手的进度/位置。
20条信息。
这是你要找的答案吗?

相关问题