1.Queues

rabbitMQ 镜像队列设置 rabbitmq队列状态_java

  • Virtual host 隔离目录
  • name 队列名字
  • type 类型
  • Features 【D代表是一个持久态的队列,服务宕机或重启后队列依然存在】
  • state 就绪状态
  • Ready 待消费的消息总数
  • total 消息总条数
  • Unacked 待应答的消息总数

点击queue1进入下一个页面

rabbitMQ 镜像队列设置 rabbitmq队列状态_持久化_02


1.1 overview 查看当前队列基本运行状况和条目数,占用空间,持久化状态,内存状况

rabbitMQ 镜像队列设置 rabbitmq队列状态_持久化_03

1.2 consumers 是否有消费者进行消费

rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_04


1.3 bindings 绑定的交换机和路由key,如果队列没有绑定任何交换机则会绑定默认交换机

rabbitMQ 镜像队列设置 rabbitmq队列状态_java_05


1.4 publish message 发送消息(持久化和非持久化发送)

  • 持久化后发送消息会立刻被存盘
  • 非持久化重启后队列会被清空

rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_06


1.5 get message 获取消息

rabbitMQ 镜像队列设置 rabbitmq队列状态_rabbitMQ 镜像队列设置_07


rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_08

  • Nack 预览获取消息
  • ack 获取消息消费并且应答,生产环境慎用

1.6 move message 移动消息

rabbitMQ 镜像队列设置 rabbitmq队列状态_rabbitMQ 镜像队列设置_09


1.7 delede、purge删除和清空队列

rabbitMQ 镜像队列设置 rabbitmq队列状态_rabbitMQ 镜像队列设置_10


1.8 runtime metrics 运行队列的基本内存状况和占用磁盘大小

rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_11

2.Exchanges

rabbitMQ 镜像队列设置 rabbitmq队列状态_持久化_12

  • AMQP default 没有绑定任何交换机的队列默认绑定到此交换机
  • direct 路由模式

点击AMQP进入下一个页面

rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_13

  • routing key 发送至哪个queue
  • payload 发送内容

发送一条消息至队列

rabbitMQ 镜像队列设置 rabbitmq队列状态_rabbitMQ 镜像队列设置_14

  • 点击队列查看收到的条数

rabbitMQ 镜像队列设置 rabbitmq队列状态_持久化_15

  • 右上角可以设置刷新频率
在get message中查看消息
  • message 可以指定取出的条数
  • nack获取后队列中条数依然存在
  • rabbitMQ 镜像队列设置 rabbitmq队列状态_rabbitmq_16


  • rabbitMQ 镜像队列设置 rabbitmq队列状态_持久化_17

  • ack获取后队列中消息消失
  • rabbitMQ 镜像队列设置 rabbitmq队列状态_发送消息_18

    rabbitMQ 镜像队列设置 rabbitmq队列状态_java_19

代码实现

  • maven依赖
<dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.10.0</version>
        </dependency>
  • producer
package com.zq.rabbitmq.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @author jigua
 * @version 1.0
 * @className Producer
 * @description
 * @create 2022/5/12 10:49
 */
public class Producer {

    public static void main(String[] args) {

        //创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("ip地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("密码");
        connectionFactory.setVirtualHost("/");
        //创建连接connection
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection("生产者");
            channel = connection.createChannel();
            String queueName = "queue2";
            /*
             * 队列名称
             * 是否持久化  
             * 是否是独占队列
             * 是否自动删除,随着最后一个消费者消息消费完毕是否把队列删除
             * 携带附属参数
             **/ 
            channel.queueDeclare(queueName, true, false, false, null);

            String message = "hello rabbitmq!";
            //第一个参数为交换机,没有则会使用默认交换机
            channel.basicPublish("", queueName, null, message.getBytes());
            System.out.println("消息发送成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(channel != null && channel.isOpen()){
                try {
                    channel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

            if(connection != null && connection.isOpen()){
                try {
                    connection.close();
                }catch (Exception e){
					e.printStackTrace();
                }
            }
        }

        //创建连接获取通道channel   
        //创建交换机,队列,绑定关系,路由key,发送消息,接收消息
        //准备消息
        //发送消息给队列queue
        //关闭连接
        //关闭通道
    }
}
  • consumer
package com.zq.rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @author jigua
 * @version 1.0
 * @className Consumer
 * @description
 * @create 2022/5/12 10:49
 */
public class Consumer {

    public static void main(String[] args) {

        //创建连接工程
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("ip地址");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("密码");
        connectionFactory.setVirtualHost("/");
        //创建连接connection
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection("生产者");
            channel = connection.createChannel();
            String queueName = "queue2";
            channel.basicConsume(queueName, true, new DeliverCallback() {
                @Override
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println("收到的消息是" + new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String s) throws IOException {
                    System.out.println("消息接受失败...");
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(channel != null && channel.isOpen()){
                try {
                    channel.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }

            if(connection != null && connection.isOpen()){
                try {
                    connection.close();
                }catch (Exception e){
					e.printStackTrace();
                }
            }
        }
    }
}
  • rabbitmq基于channel处理,connection短链接三次握手四次挥手耗时长,所以做了长链接,通过信道 channel来处理消息,性能高
  • 非持久化队列也会存盘,但是重启服务会丢失