发布时间:2026/8/31 14:40:31
java操作rabbitmq收发消息 //生产者 //配置 !-- 引入rabbitmq-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency spring: rabbitmq: host: 192.168.200.129 port: 5672 username: guest password: guest # 开启发送端确认 publisher-confirm-type: correlated # 开启发送到队列确认 publisher-returns: true # 异步回调 template: mandatory: true Configuration public class RabbitMQConfig { //使用Jackson转换消息格式为JSON便于调试和传输复杂对象。 Bean public MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); // } //初始化rabbitmq PostConstruct public void initRabbitTemplate() { //confirm message是否正确发送到交换机 rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() { /** * 确认消息是否正确发送到交换机 * param correlationData 消息的唯一标识 * param ack 消息是否正确发送到交换机 * param cause 错误信息 */ Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { System.out.println(confirm...correlationData[correlationData]ack[ack]cause[cause]); } }); rabbitTemplate.setMandatory(true); //消息从exchange发送到queue失败返回处理 rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() { /** * 消息发送失败返回处理 * param message 消息 * param replayCode 错误码 * param replyText 错误信息 * param exchange 交换机 * param routingkey 路由键 */ Override public void returnedMessage(Message message, int replayCode, String replyText, String exchange, String routingkey) { System.out.println(returnedMessage...message[message]replayCode[replayCode]replyText[replyText]exchange[exchange]routingkey[routingkey]); } }); }} //发送消息 rabbitTemplate.convertAndSend(order-event-exchange,order.seckill.order,seckillOrderTo);//消费者 !-- 引入rabbitmq-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-amqp/artifactId /dependency //配置 spring: rabbitmq: host: 192.168.200.129 port: 5672 username: guest password: guest # 手动确认收到信息 listener: simple: acknowledge-mode: manualConfiguration public class RabbitMQConfig {Bean public MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); }/** * sec kill queue */ Bean public Queue orderSecKillQueue() { return new Queue(order.seckill.queue, true, false, false); } /** * sec kill binding */ Bean public Binding orderSecKillQueueBinding() { return new Binding(order.seckill.queue, Binding.DestinationType.QUEUE, order-event-exchange, order.seckill.order, null); }} //接收message Slf4j RabbitListener(queues order.seckill.queue) Component public class OrderSeckillListener { Autowired private OrderSeckillService orderSeckillService; RabbitHandler public void listener(SeckillOrderTo to, Channel channel, Message message) { log.info(收到秒杀订单信息{}, to); try { orderSeckillService.createSeckillOrder(to); channel.basicAck(message.getMessageProperties().getDeliveryTag(),false); } catch (Exception e) { throw new RuntimeException(e); } } }

相关新闻

2026/8/28 16:46:52

ClaudeCode深度解析:面向中高级工程师的代码认知增强系统

1. 这不是又一个“AI编程神器”的营销话术,而是我用它重写了三个生产级服务后的实话ClaudeCode——注意,不是Claude,也不是CodeLlama,更不是GitHub Copilot——是Anthropic在2024年中低调释放的一套面向代码场景深度优化的推理引擎…

2026/8/30 4:11:24

STM32F439ZG与L9958电机控制方案设计与实现

1. 项目概述:L9958与STM32F439ZG的电机控制方案在工业自动化和机器人领域,电机控制系统的性能直接决定了设备的动态响应和运动精度。L9958作为意法半导体(ST)推出的专用电机驱动芯片,与STM32F439ZG高性能MCU的组合,为开发者提供了…

2026/9/1 6:01:03

大模型 API 成本评估指南:拆解计费结构、沉淀可复现对比流程

在实际项目的模型选型讨论中,经常会出现一句话把成本问题一笔带过的现象:“某个模型更便宜,直接换过去就行。”比如当大家看到“GLM-5.3 成本仅为 FABLE 5 的八分之一”这类结论时,不要急着把它当既定事实写进方案。大模型 API 的…

2026/9/1 6:01:03

基于XML的轻量级文章系统:DOM增删改查实战与避坑指南

简介:一套基于ASPXML的轻量文章系统源码,核心围绕XML数据存储的增删改操作展开,面向ASP初学者、Web开发学习者以及需要维护传统ASP项目的工程师,可解决以XML为数据层时如何高效管理文章、分类、回复等内容的实际问题。系统集成了文…

2026/9/1 6:01:03

Codex CLI 实战:为开源项目添加 arm64 架构支持全程解析

如果你正在维护一个编译型开源项目,并且已经发布了 amd64 版本,那么随着 ARM 云服务器、Apple Silicon 和各类开发板的普及,“要不要支持 arm64”这个问题早晚会摆到面前。最近围绕 “omarchy 添加 arm64 支持” 这类架构适配任务的讨论越来越…

2026/9/1 6:01:03

小白程序员必看:如何抓住AI红利,提升效率与竞争力?

本文深入探讨了普通人在AI时代的机遇与挑战,强调AI红利并非唾手可得,而是需要结合自身能力提升效率。文章指出,2026年AI将主要在编程辅助、内容生成、数据分析等领域发挥作用,并提供了三条实操路径:用AI武装现有工作、…

2026/9/1 5:56:03

完全模型组智能车方案:从视觉识别到ROS控制的完整实践

简介:来自湖北工业大学蓝电YYDS Car队的第十七届全国大学生智能汽车竞赛完全模型组完整参赛工程包,面向智能车竞赛参赛者及嵌入式开发者,可复现车队的工程组织与算法实现。压缩包共539个文件,大小约69.67MB,以C/C源码为…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/31 2:14:20

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/31 1:41:28

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

2026/9/1 0:00:42

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/1 0:00:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/1 0:00:42

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…