官网 https://www.rabbitmq.com
一、安装需要的环境
1、Erlang语言环境安装
yum install erlang -y
安装语言并查看版本
erl -v
查找对应合适的rabbitmq
https://www.rabbitmq.com/which-erlang.html
2、安装插件
yum -y install socat
安装socat
插件
3、服务器开放端口
RabbitMQ默认监听5672,可视化界面15672
二、安装RabbitMQ
1、下载
在官网找到合适的版本的安装包
https://github.com/rabbitmq/rabbitmq-server/releases
目前服务器上安装的是 ErlangOpt22,安装rabbitmq版本为3.8.3
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.3/rabbitmq-server-3.8.3-1.el7.noarch.rpm
2、安装
yum install -y rabbitmq-server-3.8.3-1.el7.noarch.rpm
3、常用命令
#启动
service rabbitmq-server start
#停止
service rabbitmq-server stop
#重启
service rabbitmq-server restart
#开启管理界面
rabbitmq-plugins enable rabbitmq_management
用户设置
#设置用户名密码 rabbitmqctl add_user 【账号】 【密码】
rabbitmqctl add_user admin admin
#给用户设置标签
rabbitmqctl set_user_tags admin administrator
#授权命令
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
标签
administrator 总管理员 所有权限
monitoring 监控者 登录控制台 查看所有信息
policymaker 策略定制者 登录控制台 制定策略
management 管理员 登录控制台
三、RabbitMQ的简单应用
1、创建连接
//1、创建连接工程
ConnectionFactory connectionFactory = new ConnectionFactory();
//rabbitmq主机
connectionFactory.setHost("43.139.20.236");
//端口号
connectionFactory.setPort(5672);
//用户名
connectionFactory.setUsername("admin");
//密码
connectionFactory.setPassword("admin");
//虚拟机地址
connectionFactory.setVirtualHost("/");
2、获取连接与通道
//2、创建连接connection
Connection connection = connectionFactory.newConnection("生产者");
//3、通过连接获取通道channel
Channel channel = connection.createChannel();
3、发送消息(生产者)
消息为二进制的数据
//队列名称
String queueName = "queue1";
/*
方法参数
* String var1 - 队列名称
* boolean var2 - 是否持久化 非持久化重启后丢失
* boolean var3 - 是否排他性
* boolean var4 - 是否自动删除 最后一个消费者消费完是否删除队列
* Map<String, Object> var5 - 携带附带参数,给消费者使用
*/
channel.queueDeclare(queueName, false, false, false, null);
//5、准备消息给队列
String msg = "Hello,I'm RabbitMQ.";
//6、发送消息给队列
/*
方法参数
* String var1
* String var2 - 队列名称
* BasicProperties var3 - 消息计划
* byte[] var4 - 消息内容二进制数组
*/
channel.basicPublish("", queueName, MessageProperties.PERSISTENT_TEXT_PLAIN, msg.getBytes(StandardCharsets.UTF_8));
4、接受消息(消费者)
String queueName = "queue1";
//参数1:队列名称
//参数2:
//参数3:成功回调
//参数4:失败回调
channel.basicConsume(queueName, true, (s, delivery) -> {
//正常返回回调
//字节流
byte[] body = delivery.getBody();
String msg = new String(body);
log.info("接受到的消息为:{}", msg);
}, s -> {
//异常返回回调
log.error("接受消息失败...");
log.error("收到参数为:{}",s);
});
四、常用的工作模式
1、简单模式
指定某个队列进行消息推送,消费中从某个队列中取出
2、工作模式
发送消息到某个对列中,消费者存在竞争关系,只能消费一次
3、发布/订阅模式
type = fanout
通过设置交换机,交换机绑定多个对列表,后续发布消息则只需要通过交换机,交换机会发送到所有的队列中,便于不同消费者的使用
4、指定订阅模式
type = direct
在发布订阅的基础上,增加路由key的过滤,交换机根据不同的路由key绑定队列,根据消息中的路由key来指定需要发送消息到哪些路由中。
5、主题模式
type = topic
主题模式在指定订阅模式上优化了路由key的过滤,增加了对key值的模糊匹配,消息发送至满足条件的队列
*:为有1个
#:为任意个数,可为0
1、 *.com.* 匹配条件为前后数量各1个,例如: xxx.com.order格式可匹配
2、 #.com.# 匹配条件为前后数量不限 例如 com , xxx.com , com.order , xxx.com.order都可匹配
3、 #.com.* 匹配条件为前不限制,后为1个