rabbitmq - 用于聊天频道组播的 RabbitMQ
问题描述
假设我有一个简单的聊天应用程序,其中一些客户端可以向某个通道 X 发布消息,而一些客户端想要订阅 X 中的所有消息(基于通道的多播)。
我会为每个频道创建一个 Fanout Exchange,还是有办法为这个用例使用主题?
此外,添加到通道 X 的新客户端应该能够读取来自 X 的最后一条消息。这是如何完成的?
它会扩展到数百万个频道吗?
(或者我应该看看 MQTT?)
解决方案
RabbitMQ 主题交换(使用 pub/sub)绝对是创建这种分发模式的一个选项......生产者将确保他们的消息的路由密钥对应于“通道 X”,消费者(通过他们的队列)将绑定到这个与匹配的模式进行交换。这应该意味着您不需要为每个频道设置特定的 Exchange。但未知它是否可以扩展到数百万个频道。
如果考虑其他消息传递技术,也许看看 Solace?(仅供参考,我为他们工作)。我们实际上有一个免费的 Udemy 开发课程,您可以在其中构建一个聊天应用程序! https://www.udemy.com/fundamentals-of-solace-development/。如果你想走这条路,Solace 原生支持 MQTT,并且还具有内置的重播功能,可用于检索给定主题的最后n条消息。
推荐阅读
- java - 如何在java中将图像转换为int [] []?
- sql - 为什么尝试将 varchar 转换为 int 时仍然出现错误?
- asp.net-core - 发布到 IIS10 时在 PageModel 中未发现端点:Http Response 404 .Net Core RazorPages
- lightgbm - bin映射是如何构建的?
- authentication - CakePHP 3.7 - 从自定义身份验证类中设置视图变量
- java - 如何为双摆添加鼠标拖动功能
- angular - 从 Angular 7 (MSAL) 调用 ASP.NET Core 2.2 时颁发者无效
- c++ - C++ - 将字符数组转换为十六进制
- node.js - Cloudformation awssdk InsufficientCapabilitiesException:需要功能:[CAPABILITY_IAM]
- html - 与背景图像相比的动画宽度