有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
在需要进行异步通信的应用情景中推荐使用 CMQ。例如:
应用需要确保消息的可靠传递,即使发送消息时接收者由于断电、宕机或 CPU 负载过高等原因不可用,消息也可以在接收者可用时被送达。传统的消息队列把消息储存在内存中,故而不具备这一功能。腾讯云 CMQ 分布式消息队列中的消息会被持久化保存,直到接收者成功获取它。
需要在访问量与日俱增、囤积在队列中的消息数日益增长的情况下也能正常运转。传统的消息队列把消息存在本地内存中,单机的处理能力和内存容量都是有限的,不具备可扩展性。腾讯云 CMQ 的分布式架构保证了其扩容的简易性,更重要的是扩容对 CMQ 的使用者是完全透明的。
两个服务在网络不能互通或者应用的路由信息(例如 IP 和端口)不确定的情况下需要通信。例如,两个腾讯云上的服务在不知道对方地址的情况下需要进行通信,则可以通过约定队列名,一个向队列发送消息,一个从队列中收取消息而实现。
系统组件之间或者应用之间通信较多,需要组件或者应用自身维护彼此的网络连接,而且通信的内容不仅一种。这时,使用传统的架构会使得系统设计复杂。例如:当有一个中央处理服务需要向多个任务处理服务分派任务时(类似于 master-worker 模式),master 需要维护与所有 worker 的连接,并判断 worker 是否开始处理任务从而决策是否需要重新分派任务。同时,worker 的任务结果也需要汇报给 master。要在一个层面维护这样的系统会导致设计复杂,实现难度和维护成本大。如下图所示,使用腾讯云 CMQ 减轻两方之间的耦合性会使系统简洁高效许多。

系统组件之间或者应用之间耦合较紧,尤其对依赖的组件可控性较弱的情况下,希望降低耦合度。例如:公司业务 CGI 收到用户提交的内容,将部分数据存储在自身的系统中,并将处理后的数据转发给其他业务应用(如数据分析系统、数据存储系统等)。传统的解决方案是服务间通过 socket 建立连接,此时如果接收方的 IP 或端口改变,或换了另一个接收方,则需要数据发送者进行修改。使用腾讯云 CMQ,发送者和接收者对彼此信息无感知,耦合度大大降低。