RabbitMQ的学习笔记

RabbitMQ的学习笔记

入门及消息分发机制

  • 简介

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端。主要用于分布式系统中存储转发消息,在易用性、扩展性、高可用有明显的优势。

  • RabbitMQ的安装

  • https://www.cnblogs.com/Turbo/p/11784545.html

    sudo rpm -Uvh --nodeps /home/download/erlang-21.3.8.6-1.el7.x86_64.rpm

    修改配置文件 cd /etc/rabbitmq/ vi rabbitmq.config

    查看状态:sudo rabbitmqctl status

    停止:sudo rabbitmqctl stop

    开启:rabbitmq-server

    关闭防火墙: https://www.cnblogs.com/jxldjsn/p/10794171.html

  • RabbitMQ基本配置

RabbitMQ有一套默认的配置,可以满足日常的开发需求,如果需要修改,需要自己创建一个配置文件。

touch etc/rabbitmq/rabbitmq.conf

rpm-ivh –nodeps rabbitmq-server-3.8.3-1.el6.noarch.rpm

AMQP协议(主要)

amqp协议是高级消息队列协议,是应用层协议的一个开放标准,面向消息的中间件设计。rabbitmq学习主要以amqp协议为主。

AMQP结构
RabbitMQ的学习笔记

AMQP核心概念:

RabbitMQ的学习笔记

exchangel的作用是根据类型来决定的,分为以下几个类型:

fanout(扇形交换器) : 会把所有发送到该交换器的消息路由到与该交换器绑定的队列中,通俗的来讲就是凡是和它绑定的queue,都会收到相同的消息,各发一份。

direct(直连交换器):会把消息路由到那些BindingKey 和 RoutKey 完全匹配的队列中,通俗的来讲就是凡是和exchange绑定的queue 会有一个bindKey ,记录交换机和消费者关系,具体和消息体中的routKey来匹配发送给哪个消费者实现绑定分发(bindKey和RoutKey完全一对一匹配)。

默认:根据queue的名称来指定发送到哪一个queue。

topic(主题交换器):可以通过通配符进行模糊匹配,然后根据消息体中的routKey来模糊匹配将消息发送到匹配上的queue中。

headers(头交换器): 比较特殊,并不是根据key来指定,而是根据指定的header信息来进行匹配。

Producer

Producer:生产者,投递消息的一方,生产者创建消息然后发布到RabbitMQ.

消息一般包含俩个部分:消息体和附加消息

消息体:一般是一个带有实际业务逻辑结构的数据,如一个json 字符串,也可以进一步对这个字符串进行序列化操作。

附加消息:表述一些信息,比如交换机的名称,路由key和一些自定义的属性等。

Broker

Broker:消息中间件的服务节点(对于集群来讲是一个节点,如果不是集群可以直接理解为服务器)。

Virtual Host

Virtual Host: 虚拟主机,表示一批交换机消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。(eg: mysql服务器中的一个database,每一个database中数据不互通,表可以重复。)

Channel

channel: 频道或者信道,是建立在Connection连接之上的一种轻量级连接。

RabbitMQ的学习笔记

RoutKey

RoutKey: 路由键,生产者将消息发送给交换器的时候,一般会指定一个RoutKey,来指定这个消息的路由规则。

Exchange

Exchange;交换器,生产者将消息发送到交换器,再由交换器把消息路由到一个或者多个队列中,如果路由不到或者返回给生产者或者会直接丢弃。

Queue

Queue: 队列,是RabbitMQ的内部对象,用来存储消息。

Binding

Binding : 绑定,一般用来把交换器与队列关联起来,在绑定的时候会有一个绑定key,这样交换器就知道怎么把消息正确的路由到队列。

Consumer

Consumer: 消费者,接收消息的一方,消费者连接到RabbitMQ服务器,并且订阅到队列上。consumer消费消息时只会消费消息的消息体部分。消费者不知道生产者是谁,存入队列中只会有消息体其余消息会清除。

RabbitMQ的学习笔记

梳理流程:

RabbitMQ的学习笔记

生产者:

RabbitMQ的学习笔记

RabbitMQ的学习笔记

RabbitMQ的学习笔记

消费者:

RabbitMQ的学习笔记

RabbitMQ的学习笔记