欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > RabbitMQ快速入门

RabbitMQ快速入门

2025/6/28 3:28:55 来源:https://blog.csdn.net/m0_73992740/article/details/144240948  浏览:    关键词:RabbitMQ快速入门

文章目录

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

一. 引入依赖

在这里插入图片描述

<!-- 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. 创建连接

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

2. 创建channel

     //创建channelChannel channel = connection.createChannel();

3. 声明一个队列

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

参数说明:
在这里插入图片描述

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

4. 发送消息

每个虚拟机会有几个内置的交换机, 内置交换机的名称是空字符串(“”)
我们现在要编写的事简单的应用场景, 使用内置交换机即可, 此时, 生产者发送的消息会根据队列名直接路由到对应的队列, 无需关心交换机
在这里插入图片描述

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

参数说明:
在这里插入图片描述

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

5. 释放资源

		 //释放资源channel.close();connection.close();

6. 运行代码

队列添加成功
在这里插入图片描述
点进去就可以看到消息
在这里插入图片描述
如果没有进行资源释放, 就会看到连接信息和channel信息
在这里插入图片描述

三. 编写消费者代码

1. 创建连接

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

2. 创建channel

     //创建channelChannel channel = connection.createChannel();

3. 声明队列

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

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

4. 消费消息

		//消费消息DefaultConsumer consumer = new DefaultConsumer(channel){@Overridepublic 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. 释放资源

 		 //释放资源channel.close();connection.close();

6. 运行代码

在这里插入图片描述

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

目前只能看到打印一条数据, 因为还没等打印成功, 资源就被释放了
可以加入等待, 让等全部打印成功后再进行资源释放
在这里插入图片描述
生产10条数据:
在这里插入图片描述
执行:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词