例如,制作人A在队列/频道上向消费者A发送消息。假设这是体育比分。
如何让多个客户端(台式机,移动设备等)收听或连接到消费者A?这样做的最佳选择是什么?
我问这个问题与基础消息代理无关。
答案 0 :(得分:2)
生产者A将队列/渠道上的消息传递给消费者A
在Apache Kafka中,我们谈论的是一个"主题"。
我的问题更像是"如果出租车应用程序必须向所有出租车司机发送信息(相同的信息),让我们说在一个特定的城市10,000,将所有出租车司机订阅同一个消费者?
让我们说我们正在谈论所有出租车司机正在使用的Android应用程序。
我的假设:
我的意思是"消费者"在我的回答中是一个服务器/节点,它从某个消息代理消耗特定队列/主题的消息,例如来自RabbitMQ或Apache Kafka。
消费的每条消息都包含一条应传递给所有10 000个驱动程序的业务消息,例如"市中心有警察控制"。
我认为商务讯息每天都会被发送好几次,所以当司机离线一天后,他会在登录后收到几条消息。
我假设每个驱动程序(客户端)都有唯一的ID。
我假设通过HTTP进行通信,例如每个客户(10k出租车中的每个应用程序)都在发出HTTP请求,例如每隔30秒向服务器检查是否有新消息。请求中提供了客户端的ID(某些身份验证也是必须的,但这与此无关)。因此,如果有10k个客户端,那么如果所有驱动程序都在线,那么服务器平均每秒会有大约333个请求。
可能的解决方案:
服务器消耗所有消息并将其保存在某些快速存储中,例如memcached或redis。
同时,服务器会为所有10k驱动程序保留有关特定驱动程序收到的最后一条消息的信息。如上所述,这也应该存储在一些快速存储中。
可能的情况:
所以,让我们说在过去24小时内有20封邮件,每封邮件的ID为1到20。
总结
总结一下,你需要存储在机器中:
这是您正在寻找的答案吗?
答案 1 :(得分:0)
如果您使用的是web / servlet容器,则可以使用pub / sub JMS。
或者现在有一天你可以看到网络套接字,这可以为你提供全双工通信..在互联网上搜索网络套接字..
答案 2 :(得分:0)
Kafka有一个消费者群体的概念,如果你有一个主题A和3个消费者A1,B1,C1并且你想要创建发送到主题A的消息副本发送到A1,B1和C1然后启动三个消费者3个不同的消费群体。
有关消费者群体的详细信息,请查看Kafka Article on javaworld