RabbitMQ 2 RabbitMQ安装,配置 Java中使用
uwupu 啦啦啦啦啦

使用

  • 新增用户

    • ```bash
      rabbitmqctl add_user admin admin
      1
      2
      3
      4
      5

      - 设置用户分配操作权限

      - ```bash
      rabbitmqctl set_user_tags admin administrator
  • 为用户添加资源权限

    • ```bash
      rabbitmqctl set_permissions -p / admin “.“ “.“ “.*”
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

      # 命令

      ```bash
      rabbitmqctl add_user USERNAME PASSWORD #账号密码
      rabbitmqctl set_user_tags USERNAME administrator #赋予角色
      rabbitmqctl change_password USERNAME NEWPASSWORD # 修改密码
      rabbitmqctl list_users # 查看用户清单

      rabbitmqctl [-p <vhostpath>] <user> <conf> <write> <read>
      rabbitmqctl set_permissions -p / USERNAME ".*" ".*" ".*" #设置所有权限

其他

1
2
rabbitmq-plugins enable rabbitmq_management # 添加管理插件
# Web管理插件,默认端口15672.

RabbitMQ默认用户名和密码:guest

用户级别

  • administrator,可以登录控制台,查看所有信息,可以对rabbitmq进行管理;
    • 最高权限
    • 可以创建和删除virtual hosts
    • 可以查看,创建和删除users
    • 查看创建permissions
    • 关闭所有用户的connections
  • monitoring监控者,登录控制台,查看所有信息
    • 包含management所有权限
    • 罗列出所有的virtual hosts,包括不能登录的virtual ohsts
    • 查看其他用户的connections和channels信息
    • 查看节点级别的数据如clustering和memory使用情况
    • 查看所有的virtual hosts的全局统计信息。
  • policymaker策略制定者,登录控制台,制定策略
    • 包含management所有权限
    • 查看、创建额删除自己的virtual hosts所属的policies和parameters信息。
  • managment普通管理员,登录控制台
    • 列出自己可以通过AMQP登入的虚拟机
    • 查看自己的虚拟机节点virtual hosts的queues,exchanges和bindings信息
    • 查看和关闭自己的channels和connections
    • 查看有关自己的虚拟机节点virtual hosts的统计信息,包括其他用户在这个节点的virtual hosts的活动信息。
  • none,不能访问management plugin。

在Java中使用/RabbitMQ简单模式实现

依赖

1
2
3
4
5
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.14.2</version>
</dependency>

使用

  1. 创建连接工厂,创建连接Connection
  2. 通过连接获取通道Channel
  3. 通过通道创建交换机,声明队列,绑定关系,路由key,发送消息,接收消息
  4. 声明队列
  5. 准备消息内容
  6. 发送消息给队列
  7. 关闭连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Producer {

public static void main(String[] args) throws IOException, TimeoutException {
//1. 创建连接
ConnectionFactory connectionFactory = new ConnectionFactory(){{
setHost("192.168.227.131");
setPort(5672);
setUsername("admin");
setPassword("admin123");
setVirtualHost("/");//
}};

Connection connection = null;
Channel channel = null;
try {
//2. 获取连接
connection = connectionFactory.newConnection("Test生产者");
//3. 通过连接获取通道Channel
channel = connection.createChannel();

String queueName = "Queue1";
//声明队列
/**
* @params1 队列名称
* @params2 是否要持久化durable,是否将队列存储到磁盘
* @params3 排他性,是否只对当前Connection可见。若为true,则其他连接不可见此队列,且在连接断开时删除当前队列。
* @params4 是否自动删除,在最后一个消费者断开连接后是否自动删除。
* @params5 携带附属参数
*/
channel.queueDeclare(queueName,false,false,false,null);

//准备消息内容
String message = "Hello World";
/**
* @params1 exchange,交换机
* @params2 当为默认模式,则这里为队列名。其他则为RoutingKey
* @params3 后续详讲
* @params4 消息主体,信息的二进制数据
* 可以存在没有交换机的队列吗?不可以,若没有输入交换机,则会使用一个默认的交换机
*/
channel.basicPublish("",queueName,null,message.getBytes());

System.out.println("消息发送成功");

}catch (Exception e){
e.printStackTrace();
}finally {
//关闭通道
if (channel!=null && channel.isOpen()){
channel.close();
}
//关闭连接
if (connection!=null && connection.isOpen()){
connection.close();
}
}

}
}

AMQP流程

AMQP,Advanced Message Queuing Protocol(高级消息队列协议),是应用层协议的一个开发标准,为面向消息的中间件设计。

生产者流程

  1. 建立连接
  2. 开启通道
  3. 发送消息
  4. 释放资源(关闭通道)
  5. 关闭连接
1
2
3
4
5
6
7
8
9
Producer发送          Broker服务器回应
Protocol Header Connection.Start
Connection.Start-OK Connection.Tune
Connection.Tune-OK
Connection.Open Connection.Open-Ok
Channel.Open Channel.Open-Ok
Basic.Publish
Channel.Close Channel.Close-Ok
Connection.Close Connection.Close-Ok

消费者流程

  1. 建立连接
  2. 开启通道
  3. 准备接收消息
  4. Broken推送消息
    • 推送消息
  5. 发送确认
    • 向Broker发送确认收到消费消息
    • Broker收到消息后,会将消息从队列中删除;
    • 若Broker没有收到Ack,则一直发送消息,直到收到Ack为止。
  6. 释放资源
  7. 关闭连接
1
2
3
4
5
6
7
8
9
10
11
Consumer发送          Broker节点回应
Protocol Header Connection.Start
Connection.Start-OK Connection.Tune
Connection.Tune-OK
Connection.Open Connection.Open-Ok
Channel.Open Channel.Open-Ok
Basic.Consume Basic.Consume-Ok
Basic.Deliver
Basic.Ack
Channel.Close Channel.Close-Ok
Connection.Close Connection.Close-Ok

RabbitMQ组件与架构

image

整体架构

image

运行流程

image

 评论