• RabbitMQ


    rabbitMQ

    概述:

    开源的消息中间件,支持AMQP协议(Advanced Message Queue Protocol )设计。具有较高的可用性、扩展性和易用性。由Erlang语言开发。
    1617004457376

    主要特点:

    可靠性:RabbitMQ使用一些机制保证可靠性,如持久化、传输确认、发布确认。

    灵活路由:在消息进入队列之前通过Exchange路由消息。对于典型的路由功能,RabbitMQ已经提供一些内置的Exchange实现。对于更加复杂的路由功能,可以将多个Exchange绑定一起,也可以插件机制来实现Exchange。

    消息集群:多个RabbitMQ服务器可以组成一个集群。

    高可用:队列可以在集群上镜像,使得部分节点出现问题的情况下仍可用。

    多种协议:支持MQTT、STOMP协议。

    多语言:支持所有的语言,java、.net。

    跟踪机制:如果出现异常,RabbitMQ提供消息跟踪机制,使用者可以找出来发生了什么。

    架构模型

    Message

    消息,消息是没有消息名的是由消息头和消息体组成。消息体是不透明的,消息头则是由一系列的可选属性构成,属性包括路由键(routing-key), 消息优先级(priority)、是否进行持久化存储(delivery-mode )。

    Publisher

    消息生产者、 也是一个向交换器发布消息的客户端应用程序。

    Exchange

    交换器、用来接收生者发送的消息,并把消息路由到服务器中的队列
    1617004457376

    Bingding

    绑定,交换器和消息队列之间的关联。 一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

    1617004457376
    Queue

    队列,是RabbitMQ的内部对象,用于存储消息的消息容器。一个消息可以投递多个队列,消息一直在队列里面,等待消费者消费将其取走。

    1617005244724
    Connectioin

    网络连接TCP连接。

    Channel

    信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP就是通过信道发送出去。不管是发布消息、订阅消息还是接收消息,这些动作都是通过信道完成的。

    因为对于操作系统TCP的创建、连接和销毁都是非常昂贵的开销。

    信道的概念可以复用TCP连接。减少开销、节约资源。

    Consumer

    消息的消费者,表示一个从消息队列中取得消息的客户端应用程序

    Virtual Host

    虚拟主机,表示一系列,交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域

    Broker

    表示消息队列服务器实体。

    Exchange类型:

    Exchange分发消息的时候根据消息的类型不同,分发策略也是有区别的。目前常见的有,direct、topic、fanout、headers。

    Headers:匹配AMQP的消息,header而不是路由键,此外header交换器和direct交换器一致但是性能相差很多,目前几乎用不到。

    Direct:

    消息中的routing-key如果Bingding中的bingding key一致,交换器则把消息发送到对应的队列中。它是完全匹配、单播的模式。

    1617006164047

    例如:

    我们以routingKey="error"发送消息到 Exchange。
    则消息会路由到 Queue1(amqp.gen-S9b…,这是由RabbitMQ自动生成的Queue名称)和 Queue2(amqp.gen-Agl…)。
    如果我们以 routingKey=”info”或routingKey=”warning” 来发送消息,则消息只会路由到 Queue2。如果我们以其他 routingKey 发送消息,则消息不会路由到这两个 Queue 中。
    
    Fanout:

    Fanout:每个发到fanout类型交换器的消息都会分到所有绑定的队列上去。类似子网传播、每台子网内的主机都获得一份复制的消息。fanout模式下消息分发速度最快。

    生产者 Publisher 发送到 Exchange 的所有消息都会路由到图中的两个 Queue ,并最终被两个消费者(Consumer1与Comsumer2)消费。

    1617006726221
    Topic交换器

    topic交换器:topic交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键routing-key和绑定的字符串切分为单词。这些单词之间用点隔开, 它同样也会识别两个通配符:符号 “#” 和符号 “” 。# 匹配 0 个或多个单词,匹配不多不少一个单词。

    1617007082538
    routingKey="quick.orange.rabbit" 的消息会同时路由到Q1与Q2。
    routingKey="lazy.orange.fox" 的消息会路由到Q1
    routingKey="lazy.brown.fox"  的消息会路由到Q2
    routingKey=”lazy.pink.rabbit” 的消息会路由到Q2(只会投递给Q2一次,虽然这个 routingKey 与Q2的两个 bindingKey 都匹配)。
    
    routingKey=”quick.brown.fox”、
    routingKey=”orange”、
    routingKey=”quick.orange.male.rabbit”
    的消息将会被丢弃,因为它们没有匹配任何 bindingKey 。
    
  • 相关阅读:
    Redis 连接命令
    Redis 脚本
    Redis 事务
    Redis 发布订阅
    Redis HyperLogLog
    Redis 有序集合(sorted set)
    Redis 集合(Set)
    Redis 列表(List)
    Redis 哈希(Hash)
    特定消费者的限制流量
  • 原文地址:https://www.cnblogs.com/JunQiang-Ma/p/14593715.html
Copyright © 2020-2023  润新知