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结构:
AMQP核心概念:
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连接之上的一种轻量级连接。
RoutKey
RoutKey: 路由键,生产者将消息发送给交换器的时候,一般会指定一个RoutKey,来指定这个消息的路由规则。
Exchange
Exchange;交换器,生产者将消息发送到交换器,再由交换器把消息路由到一个或者多个队列中,如果路由不到或者返回给生产者或者会直接丢弃。
Queue
Queue: 队列,是RabbitMQ的内部对象,用来存储消息。
Binding
Binding : 绑定,一般用来把交换器与队列关联起来,在绑定的时候会有一个绑定key,这样交换器就知道怎么把消息正确的路由到队列。
Consumer
Consumer: 消费者,接收消息的一方,消费者连接到RabbitMQ服务器,并且订阅到队列上。consumer消费消息时只会消费消息的消息体部分。消费者不知道生产者是谁,存入队列中只会有消息体其余消息会清除。