• RabbitMQ简介和特点


    前言

    RabbitMQ 是使用Erlang语言开发的基于AMQP标准的开源实现,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不错

    RabbitMQ的特点

    1、保证可靠性(Reliability):使用持久化、传输确认、发布确认等机制

    2、灵活的路由功能(Flexible Routing):在消息进入队列之前,通过Exchange(交换器)来路由消息,对应典型的路由功能,RabbitMQ提供了内置的一些Exchange来实现、针对复杂的路由功能,可以将多个Exchange绑定在一起,也可以通过插件来实现自己的Exchange

    3、支持消息集群(Clustering):多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker

    4、具有高可用性(Highly Available):队列可以在集群中的机器进行镜像,在部分节点出现问题的情况下队列仍然可用

    5、支持多种协议(Multi-protocol):RabbitMQ除了支持AMQP协议之外,还通过插件方式支持其它消息队列协议,比如STOMP、MQTT等

    6、支持多语言客户端(Many Client):几乎支持所有常用的语言

    7、提供管理界面(Management UI):RabbitMQ提供了一个简单的用户页面,用户可以监控和管理消息

    8、提供跟踪机制(Tracing):RabbitMQ提供了消息跟踪机制,如果消息异常,使用者可以查出发生了什么情况

    9、提供插件机制(Plugin System):RabbitMQ提供了许多插件,从多方面进行扩展,也可以自己编写自己的插件

    整体架构图

    架构介绍

    1、Message(消息):由消息头和消息体组成、消息体是不透明的、消息头由一系列可选属性组成:例如routing-key路由键、priority消息优先级、delivery-mode是否持久化存储等

    2、Publisher(消息生产者):向交换机发布消息的客户端应用程序

    3、Exchange(交换器):用来接收消息生产者发布的消息,并将这些消息路由给服务器中的队列

    4、Binding(绑定):用于消息队列和交换机之间的关联

    5、Queue(消息队列):用来保存消息直到发送给消费者,是消息的容器,一条消息可以被投入到多个队列中

    6、Connection(网络连接):例如一个TCP连接

    7、Channel(信道):多路复用连接中的一条独立的双向数据流通道

    8、Consumer(消息消费者):从消息队列中取得消息的客户端应用程序

    9、Virtual Host(虚拟主机):每个vhost都是一台缩小版的RabbitMQ、它拥有自己的队列、交换器、绑定和权限机制,默认的vhost是"/"

    10、Broker(消息队列服务器实体)

    交换器类型

    目前交换器有4种类型:Direct、Fanout、Topic、Headers

    Direct:

    Direct交换器是完全匹配、单播模式,也被称为直连型模式,如果消息中的路由键和Binding中绑定键一致,交换机将消息发送到对应的队列中

    Fanout:

    Fanout交换器是扇形模式,不处理路由键,只是简单将队列绑定到交换器,发送到交换器的每条消息都回被转发到该交换器绑定的所有队列中,类型子网传播,通过Fanout交换器转发消息是最快的

    Topic:

    Topic交换器是主题模式,通过模式匹配分发消息的路由键属性,将路由键和某种模式进行匹配,此时队列需要绑定一种模式,Topic交换器将路由键和绑定的字符串切分成单词,这些单词直接用点“.”隔开。该交换器会识别两个通配符:“#”和“*”,其中“#”匹配0个或多个单词,“*”匹配不多不少一个单词

    Headers:

    匹配AMQP消息的是Header而不是路由键,功能和Direct完全一致,但性能相差很多,目前几乎不用了

  • 相关阅读:
    [UGUI]事件机制
    [C#]CompareTo
    [Unity算法]交换排序(二):快速排序
    [Unity算法]交换排序(一):冒泡排序
    [Lua]string(二):string.sub处理中文
    [Lua]string(一):string库
    [Unity热更新]LuaFramework14.打包、加载和卸载策略
    [Unity热更新]LuaFramework13.事件派发
    数仓day01
    大数据学习day39----数据仓库02------1. log4j 2. 父子maven工程(子spring项目的创建)3.项目开发(埋点日志预处理-json数据解析、清洗过滤、数据集成实现、uid回补)
  • 原文地址:https://www.cnblogs.com/liweixml/p/14646242.html
Copyright © 2020-2023  润新知