RabbitMQ快速入门

文章目录

  • [一. 引入依赖](#一. 引入依赖)
  • [二. 编写生产者代码](#二. 编写生产者代码)
      • [1. 创建连接](#1. 创建连接)
      • [2. 创建channel](#2. 创建channel)
      • [3. 声明一个队列](#3. 声明一个队列)
      • [4. 发送消息](#4. 发送消息)
      • [5. 释放资源](#5. 释放资源)
      • [6. 运行代码](#6. 运行代码)
  • [三. 编写消费者代码](#三. 编写消费者代码)
      • [1. 创建连接](#1. 创建连接)
      • [2. 创建channel](#2. 创建channel)
      • [3. 声明队列](#3. 声明队列)
      • [4. 消费消息](#4. 消费消息)
      • [5. 释放资源](#5. 释放资源)
      • [6. 运行代码](#6. 运行代码)

一. 引入依赖

xml 复制代码
<!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client -->
<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.20.0</version>
</dependency>

二. 编写生产者代码

RabbitMQ 默认的⽤于客⼾端连接的TCP 端⼝号是5672, 需要提前进⾏开放

1. 创建连接

java 复制代码
 public static void main(String[] args) throws IOException, TimeoutException {
        //1. 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("139.9.84.204");//ip
        factory.setPort(5672);//端口号
        factory.setVirtualHost("study");//虚拟机名称
        factory.setUsername("admin");//用户名
        factory.setPassword("admin");//密码
        //3. 创建连接connection
        Connection connection = factory.newConnection();

    }

2. 创建channel

java 复制代码
     //创建channel
        Channel channel = connection.createChannel();

3. 声明一个队列

java 复制代码
		//声明队列
        //如果没有一个hello这样的队列, 会自动创建, 如果有, 则不创建
        channel.queueDeclare("hello", true, false, false, null);

参数说明:

  • queue: 队列名称
  • durable: 是否持久化, 设置为true, 待持久化的队列会存盘, 服务器重启之后, 消息不会丢失
  • exclusive:
    是否独占, 只能有一个消费者监听队列
    当Connection关闭时, 是否删除队列
  • autoDelete: 是否自动删除, 当没有Consumer时, 自动删除
  • arguments: 参数

4. 发送消息

每个虚拟机会有几个内置的交换机, 内置交换机的名称是空字符串("")

我们现在要编写的事简单的应用场景, 使用内置交换机即可, 此时, 生产者发送的消息会根据队列名直接路由到对应的队列, 无需关心交换机

java 复制代码
		//发送消息
        String msg = "Hello RabbitMQ";
        channel.basicPublish("", "hello", null, msg.getBytes(StandardCharsets.UTF_8));

参数说明:

  • exchange: 交换机名称
  • routingKey: 路由名称, 当使用内置交换机时, routingKey = 队列名称
  • props: 配置信息
  • body: 发送消息的数据

5. 释放资源

java 复制代码
		 //释放资源
        channel.close();
        connection.close();

6. 运行代码

队列添加成功

点进去就可以看到消息

如果没有进行资源释放, 就会看到连接信息和channel信息

三. 编写消费者代码

1. 创建连接

java 复制代码
 public static void main(String[] args) throws IOException, TimeoutException {
        //1. 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        //2. 设置参数
        factory.setHost("139.9.84.204");//ip
        factory.setPort(5672);//端口号
        factory.setVirtualHost("study");//虚拟机名称
        factory.setUsername("admin");//用户名
        factory.setPassword("admin");//密码
        //3. 创建连接connection
        Connection connection = factory.newConnection();

    }

2. 创建channel

java 复制代码
     //创建channel
        Channel channel = connection.createChannel();

3. 声明队列

如果生产者已经声明了队列, 这步可以省略

java 复制代码
		//声明队列
        //如果没有一个hello这样的队列, 会自动创建, 如果有, 则不创建
        channel.queueDeclare("hello", true, false, false, null);

4. 消费消息

java 复制代码
		//消费消息
        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));
            }
        };
        channel.basicConsume("hello", true, consumer);     

basicConsume参数声明:

  • queue: 队列名称
  • autoAck: 是否自动确认, 消费者收到消息之后,自动和MQ确认
  • callback: Consumer类型, 表示接收到消息后, 需要执行的逻辑

Consumer介绍:

Consumer 用于定义消息消费者的行为. 当我们需要从RabbitMQ接收消息时, 需要提供⼀个实现了Consumer 接口的对象.

DefaultConsumer 是 RabbitMQ提供的⼀个默认消费者, 实现了Consumer 接口

核心方法:

从队列接收到消息时, 会⾃动调⽤该⽅法.

在这个方法中, 我们可以定义如何处理接收到的消息, 例如打印消息内容, 处理业务逻辑或者将消息

存储到数据库等

5. 释放资源

java 复制代码
 		 //释放资源
        channel.close();
        connection.close();

6. 运行代码


此时就消费了hello队列中的消息

目前只能看到打印一条数据, 因为还没等打印成功, 资源就被释放了

可以加入等待, 让等全部打印成功后再进行资源释放

生产10条数据:

执行:

相关推荐
用户8307196840821 天前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者2 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
初次攀爬者4 天前
ZooKeeper 实现分布式锁的两种方式
分布式·后端·zookeeper
让我上个超影吧5 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
塔中妖6 天前
Windows 安装 RabbitMQ 详细教程(含 Erlang 环境配置)
windows·rabbitmq·erlang
断手当码农6 天前
Redis 实现分布式锁的三种方式
数据库·redis·分布式
初次攀爬者6 天前
Redis分布式锁实现的三种方式-基于setnx,lua脚本和Redisson
redis·分布式·后端
业精于勤_荒于稀6 天前
物流订单系统99.99%可用性全链路容灾体系落地操作手册
分布式
Ronin3056 天前
信道管理模块和异步线程模块
开发语言·c++·rabbitmq·异步线程·信道管理
Asher05096 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式