掌控消息全链路(4)——RabbitMQ/Spring-AMQP高级特性详解之事务与消息分发

掌控消息全链路(4)——RabbitMQ/Spring-AMQP高级特性详解之事务与消息分发
在这里插入图片描述

🔥我的主页:九转苍翎⭐️个人专栏:《Java SE》《Java集合框架系统精讲》《MySQL高手之路:从基础到高阶》《计算机网络》《Java工程师核心能力体系构建》《RabbitMQ理论与实践》天行健,君子以自强不息。


1.事务

AMQP(高级消息队列协议)实现了事务机制,主要用于确保消息的原子性发布和确认。换言之,它允许你将多个操作(如发送消息、确认消息)绑定在一起,要么全部成功,要么全部失败

发送消息

@RestController@RequestMapping("/producer")publicclassProducerController{@Resource(name ="transRabbitTemplate")privateRabbitTemplate transRabbitTemplate;@Transactional@RequestMapping("/trans")publicStringtrans(){ transRabbitTemplate.convertAndSend("",Constants.TRANS_QUEUE,"trans test ---> 1");int num =5/0; transRabbitTemplate.convertAndSend("",Constants.TRANS_QUEUE,"trans test ---> 2");return"发送成功";}}
在这里插入图片描述


Spring Boot的RabbitMQ自动配置默认会确认模式,但RabbitMQ不允许同一个通道同时使用事务模式和确认模式,所以需要确保publisher confirms被禁用

spring:rabbitmq:publisher-confirm-type: none publisher-returns:false

配置RabbitTemplate和事务管理器

@ConfigurationpublicclassRabbitTemplateConfig{@Bean("transRabbitTemplate")publicRabbitTemplatetransRabbitTemplate(ConnectionFactory connectionFactory){RabbitTemplate rabbitTemplate =newRabbitTemplate(connectionFactory); rabbitTemplate.setChannelTransacted(true);return rabbitTemplate;}@BeanpublicRabbitTransactionManagerrabbitTransactionManager(ConnectionFactory connectionFactory){returnnewRabbitTransactionManager(connectionFactory);}}

配置队列

@ConfigurationpublicclassRabbitMQConfig{@Bean("transQueue")publicQueuetransQueue(){returnQueueBuilder.durable(Constants.TRANS_QUEUE).build();}}

2.消息限流

消息限流(Flow Control) 是RabbitMQ防止生产者发送消息速度超过消费者处理能力,导致消息积压和系统崩溃的保护机制

发送消息

@RestController@RequestMapping("/producer")publicclassProducerController{@Resource(name ="rabbitTemplate")privateRabbitTemplate rabbitTemplate;@RequestMapping("/qos")publicStringqos(){for(int i =0; i <20; i++){ rabbitTemplate.convertAndSend(Constants.QOS_EXCHANGE,"qos","qos test:"+ i);}return"发送成功";}}

配置消费者

@Component@Slf4jpublicclassQosListener{@RabbitListener(queues =Constants.QOS_QUEUE)publicvoidhandMessage(Message message,Channel channel)throwsIOException{long deliveryTag = message.getMessageProperties().getDeliveryTag();try{ log.info("接收到消息:{},deliveryTag:{}",newString(message.getBody(),StandardCharsets.UTF_8), deliveryTag); log.info("处理成功");// channel.basicAck(deliveryTag, true); // 消费者不确认消息}catch(Exception e){ channel.basicNack(deliveryTag,true,true);}}}

限制每个消费者未确认的最大消息数

spring:rabbitmq:listener:simple:acknowledge-mode: manual # 消费者确认机制prefetch:5

声明和配置交换器、队列和绑定关系

@ConfigurationpublicclassRabbitMQConfig{@Bean("qosQueue")publicQueueqosQueue(){returnQueueBuilder.durable(Constants.QOS_QUEUE).build();}@Bean("qosExchange")publicDirectExchangeqosExchange(){returnExchangeBuilder.directExchange(Constants.QOS_EXCHANGE).build();}@Bean("qosBinding")publicBindingqosBinding(@Qualifier("qosExchange")DirectExchange directExchange,@Qualifier("qosQueue")Queue queue){returnBindingBuilder.bind(queue).to(directExchange).with("qos");}}
在这里插入图片描述

Read more

【探索JAVA之路】:你真的了解 Stream 流吗?

【探索JAVA之路】:你真的了解 Stream 流吗?

目录 前言: 一、理解Stream流本质 延迟执行的核心思想 流水线(Pipeline)模型 二、流水线深入详解 中间操作 终端操作 执行顺序的陷阱与优化 三、关于并行流(Parallel Stream) 并行流场景选择 Fork/Join 框架背后的工作原理 常见陷阱 四、Stream流和循环谁快 五、高级技巧与常见误区 高级技巧 常见误区 六、Stream流总结 前言: 在日常开发中,我们已经习惯了使用 Stream 来替代繁琐的循环操作。一行list.stream().filter(...).map(...).collect(...)写得行云流水,看起来既简洁又现代。但你是否遇到过这样的场景:处理一个百万级的数据集时,同样的业务逻辑,别人的 Stream 操作只需要几秒钟,而你的却要跑上半分钟? 这其中的差异,

By Ne0inhk
破局“简历黑洞”:万字实录,从零到一构建专属您的AI简历优化超级助理

破局“简历黑洞”:万字实录,从零到一构建专属您的AI简历优化超级助理

在2025年这个信息爆炸与技术革新并行的时代,求职市场的竞争已经进入白热化阶段。对于每一位求职者而言,简历不仅仅是一份个人经历的简单罗列,它更是敲开理想企业大门的第一块,也是最关键的一块敲门砖。然而,现实是残酷的。无数满怀希望的求职者精心准备了简历,投递出去后却如石沉大海,杳无音信。这种“投递-等待-失望”的循环,正成为当代职场人普遍面临的核心痛点。 本文将为您提供一份终极指南,一步一步、手把手地教您如何利用“蓝耘智能体平台”这一先进的无代码/低代码AI应用构建平台,结合性能卓越的DeepSeek V3大模型,从零开始打造一个功能强大的、完全属于您自己的AI简历优化超级助理。您无需掌握任何复杂的编程知识,只需跟随我们的图文指引,即可完成整个构建过程,彻底告别求职路上的迷茫与焦虑。 第一章:准备工作——走进蓝耘智能体平台 在开始构建我们的智能应用之前,首先需要了解我们将要使用的核心工具——蓝耘智能体平台。它是一个企业级的AI智能体开发平台,其设计的核心理念就是降低AI技术的应用门槛,让非技术背景的业务人员也能够通过简单的拖拽和配置,快速构建出满足特定需求的AI应用。 1. 平台注

By Ne0inhk
AI全链路赋能:smardaten2.0实现软件开发全流程智能化突破

AI全链路赋能:smardaten2.0实现软件开发全流程智能化突破

一、引言:AI重构软件开发范式 2025年,生成式AI已深度渗透到软件开发生命周期的各个环节,带来了前所未有的变革。GitHub Copilot等代码生成工具日均生成代码超4000万行(2024年统计),Figma AI原型设计工具的用户增长更是达到了惊人的300%。 表面看似发展蓬勃,然而当前AI在软件开发中的应用却呈现出“工具孤岛”现象,例如需求阶段的Prompt生成、开发阶段的代码补全、测试阶段的用例生成等能力相互割裂,难以满足企业级DevOps流程的贯通需求。这种割裂状态限制了AI在软件开发中发挥更大的价值,也给企业带来了新的挑战。 本文将通过分析生成式AI应用现状和全生命周期协同路径,给企业级开发带来全新思路。 二、生成式AI应用现状分析 创新场景突破 1、需求可视化革命 AI原型工具实现了从“文本→高保真UI”的转化,如MidJourney for Design等工具,极大地简化了需求可视化的过程。某电商平台的实测数据显示,需求验证周期从原来的2周缩短至48小时,显著提高了需求阶段的效率和准确性。 这种快速的需求可视化能力,使得产品经理能够更直观地展示需求,设计师

By Ne0inhk
从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建

从新加坡《Companion Guide on Securing AI Systems 》看可信AI全生命周期防护框架构建

从新加坡《AI系统安全指南配套手册》看可信AI全生命周期防护框架构建 一、引言 1.1 研究背景与意义 近年来,人工智能(AI)技术以前所未有的速度蓬勃发展,已然成为推动各行业变革与创新的核心驱动力。从医疗领域辅助疾病诊断,到金融行业的风险预测与智能投顾,再到交通领域的自动驾驶技术,AI 的身影无处不在,为社会发展带来了巨大的效益 。据国际数据公司(IDC)预测,全球 AI 市场规模在未来几年将持续保持高速增长态势,到 2025 年有望突破千亿美元大关。 然而,随着 AI 技术的广泛应用,其安全问题也逐渐浮出水面,成为制约 AI 健康发展的关键因素。AI 系统面临着来自传统网络安全威胁以及 AI 技术特有的新兴安全挑战。在传统网络安全威胁方面,诸如网络钓鱼、DDoS 攻击、恶意软件入侵等问题屡见不鲜,这些攻击手段不仅会破坏 AI 系统的正常运行,还可能导致数据泄露、隐私侵犯等严重后果。

By Ne0inhk