当前位置: 首页 > news >正文

RabbitMQ入门:生产者和消费者示例

RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP)。它允许应用程序通过消息队列进行异步通信,提高系统的解耦性和扩展性。本文将展示一个简单的RabbitMQ生产者和消费者实现。

核心组件

1. 生产者(Producer.java)

生产者负责创建消息并将其发送到RabbitMQ队列:

package com.qcby.rabbitmq.one;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Produce {public static final String QUEUE_NAME = "hello";public static void main(String[] args) throws IOException, TimeoutException {// 1. 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1"); // RabbitMQ服务器IPfactory.setUsername("lql");     // 用户名factory.setPassword("liu20020624."); // 密码// 2. 建立连接和通道try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 3. 声明队列(如果不存在则创建)channel.queueDeclare(QUEUE_NAME,   // 队列名称false,        // 是否持久化false,        // 是否独占false,        // 是否自动删除null          // 其他参数);// 4. 发送消息String message = "hello world";channel.basicPublish("",           // 使用默认交换机QUEUE_NAME,   // 路由键(队列名称)null,         // 消息属性message.getBytes() // 消息体);System.out.println("发送消息完毕");}}
}

关键点说明

  • 使用ConnectionFactory配置RabbitMQ连接

  • queueDeclare()创建队列(幂等操作)

  • basicPublish()发送消息到默认交换机

  • 使用try-with-resources自动关闭连接

2. 消费者(Consumer.java)

消费者监听队列并处理接收到的消息:

package com.qcby.rabbitmq.one;import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer {public static final String QUEUE_NAME = "hello";public static void main(String[] args) throws IOException, TimeoutException {// 1. 创建连接工厂(同生产者)ConnectionFactory factory = new ConnectionFactory();factory.setHost("127.0.0.1");//换成你自己的ip地址factory.setUsername("lql");factory.setPassword("liu20020624.");// 2. 建立连接和通道Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 3. 定义消息处理回调DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody());System.out.println("收到消息: " + message);};CancelCallback cancelCallback = consumerTag -> {System.out.println("消息消费被中断");};// 4. 开始消费消息channel.basicConsume(QUEUE_NAME,   // 队列名称true,         // 自动确认deliverCallback, // 消息处理回调cancelCallback   // 取消回调);}
}

关键点说明

  • DeliverCallback处理接收到的消息

  • CancelCallback处理消费中断情况

  • basicConsume()启动消息监听

  • 消费者需要保持运行状态以持续接收消息

工作流程

  1. 生产者工作流

  2. 消费者工作流

运行说明

  1. 启动顺序

    • 先启动消费者(保持运行状态)

    • 再启动生产者(发送消息)

  2. 预期输出

    • 生产者控制台:发送消息完毕

    • 消费者控制台:收到消息: hello world

常见问题解决

  1. 连接失败

    • 检查RabbitMQ服务状态:rabbitmqctl status

    • 验证防火墙设置(开放5672端口)

    • 确认用户名/密码权限

  2. 消息未接收

    • 确保消费者在生产者之前启动

    • 检查队列名称是否一致

    • 验证网络连通性:telnet <IP> 5672

  3. SLF4J警告
    在pom.xml中添加日志实现依赖:

    <dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.36</version>
    </dependency>

这个示例展示了RabbitMQ最基本的消息传递模式。实际应用中,可以结合交换机、绑定键、不同消息确认模式等实现更复杂的消息路由和处理逻辑。


        通过这个示例,您可以快速理解RabbitMQ的核心概念和工作原理。建议从简单队列开始,逐步探索更高级的功能如发布/订阅、路由、主题匹配等。

http://www.xdnf.cn/news/1318033.html

相关文章:

  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 一起Oracle 19c bug 导致的业务系统超时问题分析
  • 锂电池SOH预测 | Matlab基于KPCA-PLO-Transformer-LSTM的的锂电池健康状态估计(锂电池SOH预测),附锂电池最新文章汇集
  • Linux中聚合链路与软件网桥配置指南
  • java理解
  • 使用 Python 的 `cProfile` 分析函数执行时间
  • 如何做HTTP优化
  • 计算机毕设选题推荐-基于大数据的全面皮肤病症状数据可视化分析系统【Hadoop、spark、python】
  • 【LLM】文献阅读-ISOLATE GPT:基于大语言模型的执行隔离架构
  • 自然语言处理NLP---预训练模型与 BERT
  • rt-thread audio框架移植stm32 adc+dac,对接cherryusb uac,进行录音和播放
  • 软件需求规格说明书
  • 评测系统构建
  • 43.安卓逆向2-补环境-使用unidbg(使用Smali语法调用方法和使用方法地址调用方法)
  • 问津集 #5:Crystal: A Unified Cache Storage System for Analytical Databases
  • LangChain 多任务应用开发
  • 向量数据库基础和实践 (Faiss)
  • PyCharm与前沿技术集成指南:AI开发、云原生与大数据实战
  • 【FreeRTOS】刨根问底6: 应该如何防止任务栈溢出?
  • linux中已经启用的命令和替代命令
  • Honor of Kings 101star (S40) 2025.08.17
  • 开发者说 | EmbodiedGen:为具身智能打造可交互3D世界生成引擎
  • ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration
  • GitLab CI/CD、Jenkins与GitHub Actions在Kubernetes环境中的方案对比分析
  • 多维视角下离子的特性、应用与前沿探索
  • C#读取文件, IO 类属性及使用示例
  • 为何她总在关键时“失联”?—— 解密 TCP 连接异常中断
  • tcp会无限次重传吗
  • 前端vue3+后端spring boot导出数据
  • 《设计模式》工厂方法模式