一、环境安装
安装ErLang:Downloads - Erlang/OTP
安装RabbitMQ:Downloading and Installing RabbitMQ — RabbitMQ
二、配置RabbitMQ
1-激活mq:在RabbitMQ的安装目录的sbin下执行:
rabbitmq-plugins.bat enable rabbitmq_management
2-启动Mq:执行:net start RabbitMQ
3-查看用户列表:rabbitmqctl.bat list_user
4-打开网址 http://localhost:15672 使用默认的用户名和密码登录网址:admin+admin或者guest+guest
5-试着新用户:rabbitmqctl.bat add_user 用户名 密码
6-为用户分配权限:rabbitmqctl.bat set_user_tags 用户名 权限
7-权限介绍:
rabbitmq用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management
plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他的
无法登陆管理控制台,通常就是普通的生产者和消费者。
三、java连接rabbieMQ
1-项目中添加mq依赖;
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
2-创建生产者类
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @ClassName Producer1
* @Author houyuanbo
* @Date 2022/7/16 15:42
* @Description TODO
* @Version
**/
public class Producer1 {
public static void main(String[] args) throws IOException, TimeoutException {
//1-创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("127.0.0.1");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
factory.setHandshakeTimeout(9999999);
//2-创建连接
Connection connection = factory.newConnection();
//3-创建信道
Channel channel = connection.createChannel();
//4-声明一个消息队列
//名称(需要在mq中注册使用) 是否持久化 当前队列是否只能被一个消费者消费 没有消费者时是否自动删除这个队列 指定这个队列的其他消息
channel.queueDeclare("hello8",false,false,false,null);
String msg = "my first mq msg0000000000000000000000";
//5-发送消息到指定的队列
//参数:交换机 路由规则 指定传递的消息携带的properties 要发布的消息
for (int i = 0; i < 20; i++) {
channel.basicPublish("","hello8",null,msg.getBytes());
}
System.out.println("生产者发送消息成功");
channel.close();
connection.close();
}
}
3-创建消费类:
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* @ClassName Consumer1
* @Author houyuanbo
* @Date 2022/7/16 15:53
* @Description TODO
* @Version
**/
public class Consumer1 {
public static void main(String[] args) throws IOException, TimeoutException {
//1-创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
//获取连接对象
Connection connection = factory.newConnection();
//3-根据连接获取信道
Channel channel = connection.createChannel();
//4-声明消息队列
channel.queueDeclare("hello",false,false,false,null);
//6-开启监听队列
DefaultConsumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
System.out.println("消费者收到消息: " + new String(body, "UTF-8"));
}
};
System.out.println("消费者正在等待消息。。。。。");
//5-消费者消费队列的设置 消费队列的名字 是否反馈ack给rabbitmq 指定调用哪个方法来监听
channel.basicConsume("hello",true,consumer);
//7-阻塞程序 防止程序结束
System.in.read();
//8.环比资源
channel.close();
connection.close();
}
}
运行程序:
生产者发送消息成功
Process finished with exit code 0
消费者正在等待消息。。。。。
消费者收到消息: my first mq msg0000000000000000000000
mq界面: