1 安装
RabbitMQ官网下载地址:
RabbitMQ的服务器-3.7.14.exe
RabbitMQ是由Erlang语言开发的,所以使用RabbitMQ需要安装Erlang。
Erlang官网下载地址:
otp_win64_21.3.exe
RabbitMQ引用:
2 管理界面
安装了Rabbitmq后,默认也安装了该管理工具,执行命令即可启动
## 先定位到rabbitmq安装目录
rabbitmq-plugins enable rabbitmq_management
启动后,直接在浏览器地址输入:http://localhost:15672/ 默认账号密码都是:guest
如果无法在web页打开管理界面,可以重启下RabbitMQ
net stop RabbitMQ && net start RabbitMQ
管理界面相关操作参考博文:rabbitmq后台管理界面
3 RabbitMQ的基本概念
rabbitmq:采用AMQP高级消息队列协议的一种消息队列技术,最大的特点就是消费并不需要确保提供方存在,实现了服务之间的高度解耦。
AMQP:高级消息队列协议使得遵从该规范的客户端应用和消息中间件服务器的全功能互操作成为可能。
Broker:简单来说就是消息队列服务器实体
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
Queue:消息队列载体,每个消息都会被投入到一个或多个队列
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key:路由关键字,exchange根据这个关键字进行消息投递
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离
producer:消息生产者,就是投递消息的程序
consumer:消息消费者,就是接受消息的程序
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
4 RabbitMQ的六种工作模式
六种模式官方文档:
https://www.rabbitmq.com/getstarted.html
自己写的DEMO链接:
https://download.csdn.net/download/zt102545/11656242
4.1 简单模式
说明:
一个生产者P发送消息到队列Q,一个消费者C接收。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel向队列中发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:
消费者:
4.2 工作模式
说明:
一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建一个持久的队列queue,用通道channel创建一个消息属性,使消息属性持久,不受重启影响。使用通道channel向队列中发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建一个持久的队列queue并设置每次只读取一条消息,创建消费者consumer并监听队列,获取消息处理后手动应答。
实现效果:
生产者:
消费者:
4.3 发布/订阅模式
说明:
一个生产者将消息发送到交换机,交换机以广播的模式,将消息发送到绑定到该交换机的队列上,消费者从队列里获取消息。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为fanout,使用通道向交换机发送消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为fanout,使用通道channel创建队列queue并绑定到交换机上, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:
消费者:
4.4 路由模式
说明:
生产者发送消息到交换机并且要指定路由key,消费者将队列绑定到交换机时需要指定绑定key,交换机根据路由key将消息分发给相应的绑定key的队列。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Direct,使用通道向交换机发送消息并指定路由key值。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Direct,使用通道channel创建队列queue后绑定到交换机上并指定绑定key, 创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:
消费者:
4.5 主题模式
说明:
生产者P发送消息到交换机X,交换机类型为Topic,交换机根据绑定队列的routing key的值进行通配符匹配;符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor
符号* :只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Topic,使用通道向交换机发送消息并指定路由key值。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建交换机并指定交换机类型为Topic,使用通道channel创建队列queue后绑定到交换机上并指定绑定key, key值带通配符,创建消费者consumer并监听队列,从队列中读取消息并自动应答。
实现效果:
生产者:
消费者:
4.6 RPC
说明:
消费者C主动向生产者P发出请求消息Request,该消息带有CorrelationId和ReplyTo属性,分别用于识别哪一条消息和哪个队列。生产者P收到请求后处理消息,将处理后的消息根据CorrelationId和ReplyTo属性向消费者C响应消息。
生产者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue, 创建消费者consumer并监听队列,从队列中读取消息,从消息里获取客户端通道的属性BasicProperties,根据属性BasicProperties获取到响应的队列,向响应的队列发送处理后的消息。
消费者实现思路:
创建连接工厂factory,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建随机队列queue,创建消费者consumer并监听队列,从队列中读取消息。使用通道channel创建通道属性BasicProperties,生成一个GUID赋值给CorrelationId,随机队列名称赋值给ReplyTo,服务端会根据这两个属性响应消息。最后使用通道给服务端发送消息。
实现效果:
生产者:
消费者: