RabbitMQ

Rabbitmq 简介

  

一.核心组件


  1. 链接对象(connection)

    当代码程序链接rabbitmq作为客户端操作的消息队列时,需要通过链接对象对接。

    由于其在底层是一个基于tcp/ip协议的长链接,频繁销毁创建会消耗系统资源,所以通常我们需要在他身上获取一个短链接(channel)

  2. 交换机(exchange)

    消息的并发处理不是直接交给客户端去处理(客户端语言不同,并发能力也不同),而是统一由交换机接受客户端的消息。RabbitMQ使用erlang(一种并发语言)开发的,并发能力稳定,并发性能高。

    RabbitMQ中存在四种交换机模式:

    • 直连交换机:Direct exchange

    • 扇形交换机:Fanout exchange

    • 主题交换机:Topic exchange

    • 首部交换机:Headers exchange

  3. 队列(queue)

    队列是rabbitmq里接受存储消息对象的组件,其必须绑定一个交换机。

    当交换机接受到客户端发送的消息时,会根据路由逻辑判断当前消息发送给哪个/哪些队列。把消息封装成对象,最终发送到队列

  

二. 客户端角色


所有能链接rabbitmq的软件,代码,插件都可以是rabbitmq的客户端,根据客户端功能不同,可以区分成不同的角色。

  1. 生产者productor

    生产者负责将客户端准备好的消息发送到rabbitmq。

  2. 消费者consumer

    消费者监听队列,从队列中拿到已经存储的消息对象,进行客户端的消费逻辑.

  3. 无角色

    如果客户端连接上rabbitmq 没有发送消息,也不需要接收消费消息,就是无角色的客户端。无角色客户端可以实现通过链接来声明组件。

    exchange不是自动生成来给你使用的,不同的系统,不同的客户端可以有不同的自定义的交换机,对于queue也是一样。

    组件的创建过程也是由客户端完成的.

  

三. 五种工作模式


  1. 简单模式

    简单模式中每个队列只被一个消费端监听。

    生产端负责发送消息到交换机,明确表明路由目的地。交换机接收到消息,根据路由目的转发。消费端负责监听到这个队列,一旦发现消息则执行消费逻辑。

    适用于发短信/邮件,这种一发一接的应用场景。

  2. 争抢模式

    争抢模式中,消息队列可以由多个消费端同时监听形成争抢。

    使用场景:抢红包

  3. 路由模式

    路由模式中,交换机将会按照消息的路由Key转发消息。

    生产端将携带路由key(目的地)的消息发送到交换机。交换机(类型为:direct)根据消息的路由key匹配队列,一旦匹配上了就将消息转发出去。消费端可以一对一监听,也能一对多监听。

    对应于直连交换机

    注:交换机不会存储消息,若没有匹配到或发送完毕,消息就直接删除了。

  4. 发布订阅

    发布订阅模式中,交换机不再判断路由,而是将消息发送给后端所有绑定他的队列,即群发。

    对应于扇形交换机

    可以应用于邮件群发

  5. 主题模式

    主题模式中,队列绑定交换机时使用的是一个范围key。(发布订阅中使用的是明确的key)

    对应于主题交换机

    后端队列绑定交换机使用特殊符号代替路由key字符串:

    • #:表示任意多级的任意长度字符串
    • *:表示一级的任意字符串

    应用场景:物流分拣。

原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/13091495.html