RabbitMQ
安装Rabbitmq
1.
sudo apt-get install erlang-nox
2.安装rabbitmq
安装前需要配置rabbitmq.list到etc/apt/source.list.d目录下
配置文件:
## Provides modern Erlang/OTP releases
##
## Replace $distribution with the name of the Ubuntu release used.
## On Debian, "deb/ubuntu" should be replaced with "deb/debian"
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.E495BB49CC4BBE5B.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main
## Provides RabbitMQ
##
## Replace $distribution with the name of the Ubuntu release used.
## On Debian, "deb/ubuntu" should be replaced with "deb/debian"
deb [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/io.cloudsmith.rabbitmq.9F4587F226208342.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
更新源
sudo apt-get update
安装
sudo apt-get install rabbitmq -server
查看状态
systemctl status rabbitmq-server.service 或者 service rabbitmq-server status
启动服务
systemctl start rabbitmq-server.service 或者 service rabbitmq-server start
停止服务
systemctl stop rabbitmq-server.service 或者 service rabbitmq-server stop
重启服务
systemctl restart rabbitmq-server.service 或 service rabbitmq-server restart
安装插件
进入目录:
cd /usr/lib/rabbitmq/bin
sudo ./rabbitmq-plugins enable rabbitmq_management
重启服务
systemctl restart rabbitmq-server.service 或 service rabbitmq-server restart
访问:
http://ip:15672 使用guest/guest登录
RabbitMQ用户角色及权限控制
角色 | 描述 |
---|---|
none | 不能访问 management plugin |
management | 普通管理员用户可以通过AMQP做的任何事列出自己可以通过AMQP登入的virtual hosts 查看自己的virtual hosts中的queues, exchanges 和 bindings查看和关闭自己的channels 和 connections查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。 |
policymaker | 策略制定者management可以做的任何事查看、创建和删除自己的virtual hosts所属的policies和parameters |
monitoring | 监控者management可以做的任何事列出所有virtual hosts,包括他们不能登录的virtual hosts查看其他用户的connections和channels查看节点级别的数据如clustering和memory使用情况查看真正的关于所有virtual hosts的全局的统计信息 |
administrator | 管理员policymaker和monitoring可以做的任何事创建和删除virtual hosts查看、创建和删除users查看创建和删除permissions关闭其他用户的connections |
创建用户并授权
创建用户
rabbitmqctl add_user username password
授予角色
rabbitmqctl set_user_tags username 角色名称
如果多个角色,用空格隔开
修改密码
rabbitmqctl change_password username password
删除用户
rabbitmqctl delete_user username
查看用户
rabbitmqctl list_users
IDEA中测试简单的rabbitmq生产者消费者
生产者:
package com.by;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
/**
* description:
* author:zcx
* lenovo
* 时间:2022.05.31.16.58
*/
public class Publisher {
public static void main(String[] args) throws IOException, TimeoutException {
//第一步 创建连接
ConnectionFactory factory=new ConnectionFactory();
//第二步设置mq服务器连接信息
factory.setVirtualHost("erp");//设置虚拟主机,默认是/
factory.setHost("192.168.12.63");//设置mq服务器地址
factory.setUsername("admin");//访问虚拟主机的用户名 默认是guest
factory.setPassword("zcx123");//访问虚拟主机的用户资源
factory.setPort(5672);//mq服务器端口号
//获取连接
Connection conn=factory.newConnection();
//第二步 在连接上创建信道
Channel channel=conn.createChannel();
//声明队列名称
String queue_name="hello";
//第三步 通过信道 声明队列
/**
* 参数1 queue 队列名称
* 参数2 durable 声明队列是否是持久化的,false重启mq队列会消失
* 参数3 exclvusive 是否独占的连接,否则只能同一个连接读取消息
* 参数4 outoDelete 队列在不使用时删除
*/
channel.queueDeclare(queue_name,false,false,false,null);
//第四步 发送消息
String msg="订单详情";
/**
* 参数1 交换器的名称 简单模式下默认为”“ 默认使用交换器 AMQP.default
* 参数2 路由器 在简单模式下直接指明队列名称
* 参数4 消息体
*/
AMQP.BasicProperties prop=new AMQP.BasicProperties("","utf-8",null,1,1,"","","","1001",null,"","1","0010","");
//prop.builder().appId("0100").userId("1").messageId("1").messageId("100").build();
channel.basicPublish("",queue_name,prop,msg.getBytes());
System.out.println("生产者发送消息:"+msg);
//关闭连接
conn.close();
}
}
消费者:
package com.by;
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* description:
* author:zcx
* lenovo
* 时间:2022.05.31.19.25
*/
public class Consumer {
public static void main(String[] args) throws IOException, TimeoutException {
//第一步 创建连接
ConnectionFactory factory=new ConnectionFactory();
//第二步设置mq服务器连接信息
factory.setVirtualHost("erp");//设置虚拟主机,默认是/
factory.setHost("192.168.12.63");//设置mq服务器地址
factory.setUsername("admin");//访问虚拟主机的用户名 默认是guest
factory.setPassword("zcx123");//访问虚拟主机的用户资源
factory.setPort(5672);//mq服务器端口号
//获取连接
Connection conn=factory.newConnection();
//第二步 在连接上创建信道
Channel channel=conn.createChannel();
//声明队列名称
String queue_name="hello";
//第三步 通过信道 声明队列
channel.queueDeclare(queue_name,false,false,false,null);
System.out.println("消费者开始消费:");
DeliverCallback callback=new DeliverCallback(){
@Override
public void handle(String s, Delivery delivery) throws IOException{
System.out.println("s>>>>>>>>>"+s);
BasicProperties properties= delivery.getProperties();
System.out.println(properties.getAppId());
System.out.println(properties.getUserId());
System.out.println("接收消息:"+new String(delivery.getBody()));
}
};
//从队列中读取消息
channel.basicConsume(queue_name,true,callback,var->{});
//关闭连接
//消费者的连接不能关闭
//conn.close();
}
}