RabbitMQ入门以及基本原理

一、RabbitMQ是什么?
RabbitMQ是一个开源的AMQP实现,服务器端用ErLang语言编写,支持多种客户端,用于在分布式系统中存储转发消息,在易用性,扩展性,高可用性等方面表现不俗。
二、RabbitMQ安装运行
环境准备: CentOS7, Erlang
2.1 安装Erlang:
下载erlang-solutions: wget Https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
安装erlang-solutions: sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
安装erlang: sudo yum install -y erlang
安装socat: sudo yum install -y socat

2.2 安装RabbitMq
下载 地址: Http://www.rabbitmq.com/download.html
安装RabbitMq:
sudo rpm -Uvh …(下载的rabbitmq包)

2.3 运行RabbitMq
启动RabbitMq: sudo systemctl start rabbitmq-server
查看状态: sudo systemctl status rabbitmq-server
设置为开机启动: sudo systemctl enable rabbitmq-server

2.4 RabbitMq基本配置
RabbitMq有一套默认的配置,能够满足日常开发需求,如果需要修改,需要自己创建一个配置文件。
touch /etc/rabbitmq/rabbitmq.conf

2.5 RabbitMq端口
RabbitMq会绑定一些端口,安装完后,需要将这些端口添加至防火墙。
4369:是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址,在集群中类似DNS的作用
5672,5671: AMQP 0-9-1和1.0客户端端口,没有使用SSL和使用SSL的端口
25672:用于RabbitMQ节点间和CLI工具通信,配合4369使用
15672:HTTP_API端口,管理员用户才能访问,用于管理RabbitMQ,需要启用management插件
15674:基于WebSocket的STOMP客户端端口(当插件WebSocket STOMP插件启用时打开)
15675:基于WebSocket的MQTT客户端端口(当插件WebSocket MQTT插件启用时打开)

2.6 AMQP是什么?
AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

2.7 AMQP结构
在这里插入图片描述
2.8 AMQP生产者流转过程
在这里插入图片描述
2.9 AMQP消费者流转过程
在这里插入图片描述
三、RabbitMQ核心概念
3.1 Producer:
Producer:生产者,就是投递消息的一方,生产者创建消息,然后发布到RabbitMQ中
消息一般包含两部分: 消息体和附加信息
消息体: 在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON字符串,也可以对消息进行序列化操作
附加信息: 用来表述这条信息,比如:目标交换器的名称,路由键和一些自定义属性等等。
3.2 Broker:
Broker: 消息中间件的服务节点
在这里插入图片描述
3.3 Virtual Host: 虚拟主机,表示一批交换器,消息队列和相关对象。
虚拟主机是共享相同的身份认证和加密环境的独立服务器域。
在这里插入图片描述
3.4 Channel: 频道或信道,是建立在connection连接之上的一种轻量级的连接。
大部分的操作是在Channel这个接口中完成的,包括定义队列的声明queueDeclare、
交换机的声明exchangeDeclare、队列的绑定queueBind、发布消息basicPublish、
消费消息basicConsume等。

3.5 RoutingKey: 路由键,生产者将消息发给交换器的时候,一般会指定一个RoutingKey,用来指定这个消息的路由规则。
RoutingKey需要与交换器类型和绑定建(BindingKey)联合使用.
在交换器类型和绑定建(BindingKey)固定的情况下,生产者可以在发送消息给交换器时,通过指定RoutingKey来决定消息流向那里、

3.6 Exchange: 交换器.生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中,如果路由不到,或返回给生产者,或丢弃

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

3.8 Binding: 绑定,RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定建(bindingKey),这样RabbitMQ就知道如何正确地将消息路由到队列了。

3.9 Exchange类型: fanout、direct、topic、headers四种
fanout:扇型交换机
它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中
direct: 直连交换机
它会把消息路由到那些bindingKey和routingKey完全匹配的队列中
topic:主题交换机
与direct类似,但它可以通过通配符进行模糊匹配
headers: 头交换机 性能很差,不实用
不依赖路由键的路由规则,而是根据发送的消息内容中的headers属性进行匹配

3.10 Consumer: 消费者,就是接受消息的一方,消费者连接到RabbitMQ服务器,并订阅到队列上
在这里插入图片描述

四、MQ运转流程
在这里插入图片描述
在这里插入图片描述

五、 生产者发送消息的过程:
5.1 生产者连接到RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)
5.2 生产者声明一个交换器,并设置相关属性,如 交换机类型,是否持久化等
5.3 生产者声明一个队列,并设置相关属性,如 是否排他,是否持久化,是否自动删除等
5.4 生产者通过路由键将交换器与队列绑定起来
5.5 生产者将消息发送到RabbitMQ Broker, 包含路由键,交换器等信息
5.6 相应的交换器根据接收到的路由键查找相匹配的队列
5.7 如果找到,则将从生产者发送过来的消息存入对应的队列中
5.8 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
5.9 关闭信道,关闭连接。

六、消费者接收消息的过程:
6.1 消费者连接到RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)
6.2 消费者向RabbitMQ Broker请求消费相应队列中的消息,可能会设置相应的回调函数,以及一些准备工作
6.3 等待RabbitMQ Broker回应并投递相应队列中的消息,消费者接收消息
6.4 消费者确认接收(ack)到的消息
6.5 RabbitMQ 从队列中删除已经被确认的消息
6.6 关闭信道,关闭连接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值