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

RabbitMQ的核心使用示例

我们用 注册成功 → 通过 MQ 异步打印日志 来模拟“发邮件”的场景,这样你就能清晰掌握 MQ 的核心用法了。


1. 生产者(注册成功时发消息)

@Service
public class UserService {@Autowiredprivate RabbitTemplate rabbitTemplate;@Autowiredprivate UserRepository userRepository;public void register(User user) {// 1. 保存数据库userRepository.save(user);// 2. 构造消息Map<String, String> msg = new HashMap<>();msg.put("email", user.getEmail());// 3. 发消息到交换机rabbitTemplate.convertAndSend("userExchange", "user.register", msg);System.out.println("✅ 用户注册成功,消息已发送到MQ: " + msg);}
}

2. 消费者(监听 MQ,打印日志)

@Component
public class MailConsumer {@RabbitListener(queues = "user.register.queue")public void handleRegisterMessage(Map<String, String> msg) {String email = msg.get("email");// 模拟发送邮件,这里改为打印日志System.out.println("📩 异步任务:给 " + email + " 发送欢迎邮件(模拟)");}
}

3. 配置(队列 + 交换机绑定)

@Configuration
public class RabbitConfig {@Beanpublic TopicExchange userExchange() {return new TopicExchange("userExchange");}@Beanpublic Queue userRegisterQueue() {return new Queue("user.register.queue");}@Beanpublic Binding bindingRegisterQueue(Queue userRegisterQueue, TopicExchange userExchange) {return BindingBuilder.bind(userRegisterQueue).to(userExchange).with("user.register");}
}

🚀 运行流程

  1. 调用注册接口 → 用户入库成功

  2. register() 方法发 MQ 消息 → 控制台打印

    ✅ 用户注册成功,消息已发送到MQ: {email=xxx@qq.com}
    
  3. 消费者监听到消息 → 异步打印

    📩 异步任务:给 xxx@qq.com 发送欢迎邮件(模拟)
    

这样整个流程就跑通了:接口快速返回异步处理打印日志,跟发邮件一样的逻辑。

如果出现以下异常:

Caused by: java.lang.SecurityException: Attempt to deserialize unauthorized class java.util.HashMap; add allowed class name patterns to the message converter or, if you trust the message originator, set environment variable 'SPRING_AMQP_DESERIALIZATION_TRUST_ALL' or system property 'spring.amqp.deserialization.trust.all' to true······

意思是:Spring AMQP 的消息转换器在反序列化消息时,默认启用了 安全白名单机制,不允许随便反序列化任意类,防止反序列化攻击。而你现在收到了一个 HashMap 类型的消息,但 HashMap 不在允许反序列化的白名单里,所以直接报错。

在RabbitConfig类里面加上:

@Beanpublic MessageConverter jacksonMessageConverter() {return new Jackson2JsonMessageConverter();}

即可。


文章转载自:

http://agZoebhK.Ljjmr.cn
http://gopx35Fe.Ljjmr.cn
http://JSzNmTEy.Ljjmr.cn
http://W0wWM57e.Ljjmr.cn
http://AnJX3rmN.Ljjmr.cn
http://uClD0OGN.Ljjmr.cn
http://rZOu9RZp.Ljjmr.cn
http://xhVD7MVv.Ljjmr.cn
http://ISO4mWec.Ljjmr.cn
http://JN3unoff.Ljjmr.cn
http://mMM1wQ7b.Ljjmr.cn
http://2tZrBL6d.Ljjmr.cn
http://MhpOiLg3.Ljjmr.cn
http://JbKfZDRa.Ljjmr.cn
http://qmxyZENr.Ljjmr.cn
http://k19rRrXJ.Ljjmr.cn
http://KHElrVkF.Ljjmr.cn
http://ewdhzkS9.Ljjmr.cn
http://D8YWInkO.Ljjmr.cn
http://R4VU95mj.Ljjmr.cn
http://3h0nTk50.Ljjmr.cn
http://H93LCOvH.Ljjmr.cn
http://5m50o3Oq.Ljjmr.cn
http://dl4xfxxo.Ljjmr.cn
http://wY9fjuGO.Ljjmr.cn
http://YOjqmoWH.Ljjmr.cn
http://5e7Qr6ut.Ljjmr.cn
http://QnFwS2BI.Ljjmr.cn
http://hEnkCL6b.Ljjmr.cn
http://qSp9o2yC.Ljjmr.cn
http://www.dtcms.com/a/380096.html

相关文章:

  • 大数据电商流量分析项目实战:Hive 数据仓库(三)
  • 【Kubernetes】Tomcat 启用 Prometheus 监控指标
  • 数字人分身 + 矩阵系统聚合的源码搭建与定制开发
  • 如何使用 OCR 提取扫描件 PDF 的文本(Python 实现)
  • 并发:使用volatile和不可变性实现线程安全
  • 【qml入门】在qml项目上加入用户登录qml页面(包含源码)
  • 通义灵码产品演示: 数据库设计与数据分析
  • 大疆图传十公里原理:无人机图传技术解析
  • 【论文阅读】小模型是智能体的未来
  • 空间智能 × 无人机丨考拉悠然携 AI+应急创新产品亮相东盟博览会
  • 【C++】list容器的模拟实现
  • Java学习之——“IO流“的进阶流之打印流的学习
  • Vue 进阶实战:从待办清单到完整应用(路由 / 状态管理 / 性能优化全攻略)
  • 《用 Python 和 TensorFlow 构建你的第一个神经网络:从零开始识别手写数字》
  • 深入探索Vue.js:响应式原理与性能优化
  • 58.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--图形验证码
  • 【Linux】基本指令 · 下
  • springboot+python+uniapp基于微信小程序的旅游服务系统景点信息展示 路线推荐 在线预约 评论互动系统
  • WebApp 的价值与实现:从浏览器架构到用户体验优化
  • 用户体验五大要点:从问题到解决方案的完整指南
  • 从ChatGPT家长控制功能看AI合规与技术应对策略
  • DeepSeek-VL 解析:混合视觉-语言模型如何超越传统计算机视觉方法
  • 从15kHz 到20MHz:为什么LTE带宽不能被子载波间隔整除?
  • Android SystemServer 系列专题【篇五:UserController用户状态控制】
  • Nature | 本周最新文献速递
  • Vuetify:构建优雅Vue应用的Material Design组件库
  • 6种A2A(智能体到智能体)的协议方案
  • 性能测试工具jmeter使用
  • [Windows] PDF 专业压缩工具 v3.0
  • kubectl常用命令