zoukankan      html  css  js  c++  java
  • 消息队列的简单理解

    消息队列,MessageQueue,简称MQ。消息队列中间件是分布式系统中重要的组件。

    消息队列有什么用?

    解耦 、削峰 、异步

    应用解耦:消息生产者将消息写入消息队列,需要消息的消费者从消息队列中获取,消息生产者不需要做修改。

    异步处理:消息生产者将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。
    削峰限流:系统慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。避免流量过大导致应用系统挂掉的情况

    消息队列的通讯模式

    1) 点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构。

    2) 多点广播:MQ适用于不同类型的应用。其中重要的,也是正在发展中的是"多点广播"应用,即能够将消息发送到多个目标站点(Destination List)。可以使用一条MQ指令将单一消息发送到多个目标站点,并确保为每一站点可靠地提供信息。MQ不仅提供了多点广播的功能,而且还拥有智能消息分发功能,在将一条消息发送到同一系统上的多个用户时,MQ将消息的一个复制版本和该系统上接收者的名单发送到目标MQ系统。目标MQ系统在本地复制这些消息,并将它们发送到名单上的队列,从而尽可能减少网络的传输量。

    3) 发布/订阅(Publish/Subscribe)模式:发布/订阅功能使消息的分发可以突破目的队列地理指向的限制,使消息按照特定的主题甚至内容进行分发,用户或应用程序可以根据主题或内容接收到所需要的消息。发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发。

    push模式和pull模式

    推(push)模式是一种基于C/S机制、由服务器主动将信息送到客户器的技术。
    1. 在push模式应用中,服务器把信息送给客户器之前,并没有明显的客户请求。push事务由服务器发起。push模式可以让信息主动、快速地寻找用户/客户器,信息的主动性和实时性比较好。但精确性较差,可能推送的信息并不一定满足客户的需求。
    2. 推送模式不能保证能把信息送到客户器,因为推模式采用了广播机制,如果客户器正好联网并且和服务器在同一个频道上,推送模式才是有效的。
    拉(pull)模式与推模式相反,是由客户器主动发起的事务。
    服务器把自己所拥有的信息放在指定地址(如IP、port),客户器向指定地址发送请求,把自己需要的资源“拉”回来。不仅可以准确获取自己需要的资源,还可以及时把客户端的状态反馈给服务器。

    各种消息队列的对比

    当前使用较多的消息队列有Kafka、RabbitMQ、RocketMQ、ActiveMQ、ZeroMQ、MetaMQ等

    各个消息队列对比如下:

    参考资料:

    1. 大型网站架构系列:分布式消息队列   https://www.jianshu.com/p/689ce4205021

    2. 消息队列的使用场景 https://www.zhihu.com/question/34243607/answer/127666030

    3. 消息队列的两种模式 http://blog.csdn.net/heyutao007/article/details/50131089

    4. 常用消息队列介绍及对比  http://blog.51cto.com/caczjz/2141194?source=dra
    5. 消息队列在大型分布式系统中的实战精髓  https://mp.weixin.qq.com/s/w8D0VnHBl1hX7ZMIGpYv6g
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/expiator/p/10023649.html
Copyright © 2011-2022 走看看