一、角色分类
总共分为5种角色,每个角色对应不同的权限信息
- none 啥也干不了,也无法登陆到图形化界面
不能访问 management plugin
- management 普通管理员 相当于个人中心,只查看自己的相关节点信息
列出自己可以通过AMQP登陆的虚拟机
查看自己的虚拟机节点virtual hosts的queues,exchange 和bindings信息
查看和关闭自己的channels 和 connections
查看有关自己的虚拟机节点virtual hosts的统计信息,包括其他用户在该节点virtual hosts的活动信息
- policymaker 策略制定者 在个人中心基础上,可以管理 (创建、删除) 自己的虚拟机节点和参数信息
包含management所有权限
查看和创建和删除自己的virtual hosts所属的policies 和 parameters信息
- monitoring 管理员一样,除了看自己的还是看别人的,但是只能看,不能操作别人的
包含management所有权限
罗列出所有virtual hosts,包括不能登陆的virtual hosts
查看其他用户的connections和channels使用情况
查看所有的virtual hosts的全局统计信息
- administrator 超级管理员 顶级管理员,可登陆控制台、查看所有信息、可对 rabbitmq进行管理 (全部)
最高权限
可以创建和删除virtual hosts
可以查看,创建和删除users 查看创建permisssions 关闭所有用户的connections
二、入门体验
实现步骤:
-
环境jdk1.8
-
构造一个maven工程
-
导入RabbitMQ依赖
-
启动RabbitMQ-server服务
-
定义生产者
-
定义消费者
-
观察消息在rabbitmq-server服务中的过程
模式:生产者==> 通道 ==> 消费者
添加rabbitmq依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>
创建两个类:Producer和Consumer
Producer类
public class Producer {
public static void main(String[] args) throws IOException, TimeoutException {
//所有的中间件技术都是基于tcp/ip协议基础之上构建新的协议规范,只不过rabbitmq遵循的是amqp
//1.创建连接工程
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("你的ip地址");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
connectionFactory.setVirtualHost("/");
Connection connection=null;
Channel channel =null;
try {
//2.创建连接Connection
connection = connectionFactory.newConnection("生产者");
//3.通过连接获取通道Channel
channel =connection.createChannel();
//4.通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息。
String queueName= "queue1";
/*
@params1:队列名字
@params2:是否要持久化,即是否存盘
@params3:排他性,是否独占
@params4:当最后一个消费者消息完毕以后是否把队列自动删除
@params5:携带附加信息
*/
channel.queueDeclare(queueName,false,false,false,null);
//5.准备消息内容
String message = "Hello RabbitMQ";
//6.发送消息给队列queue
channel.basicPublish("",queueName,null,message.getBytes());
System.out.println("发送成功!");
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}finally {
//7.关闭连接
if (channel!=null&&channel.isOpen()){
channel.close();
}
if (connection!=null&& connection.isOpen()){
connection.close();
}
//8.关闭通道
}
}
}
Consumer类
public class Consumer {
public static void main(String[] args) {
//所有的中间件技术都是基于tcp/ip协议基础之上构建新的协议规范,只不过rabbitmq遵循的是amqp
//1.创建连接工程
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setHost("你的IP地址");
connectionFactory.setPort(5672);
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
connectionFactory.setVirtualHost("/");
Connection connection=null;
Channel channel =null;
try {
//2.创建连接Connection
connection = connectionFactory.newConnection("消费者");
//3.通过连接获取通道Channel
channel =connection.createChannel();
//4.通过创建交换机,声明队列,绑定关系,路由key,发送消息和接收消息。
channel.basicConsume("queue1", true, new DeliverCallback() {
@Override
public void handle(String s, Delivery message) throws IOException {
System.out.println("收到消息====>" + new String(message.getBody(), "UTF-8"));
}
}, new CancelCallback() {
@Override
public void handle(String s) throws IOException {
System.out.println("接收失败了。。。。");
}
});
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}finally {
//7.关闭连接
// if (channel!=null&&channel.isOpen()){
// channel.close();
// }
// if (connection!=null&& connection.isOpen()){
// connection.close();
// }
//8.关闭通道
}
}
}
先运行生产者的代码,然后我们可以在rabbitmq的管理页面看到生成一个队列,在连接选项卡可以看到一个生产者已连接
然后运行消费者的代码,可以看到队列中的资源已经被消费,在连接选项卡可以看到、新增一个消费者已连接
以上就是RabbitMQ的入门案例