掌控消息全链路(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

Flutter 三方库 stream_channel 的鸿蒙化适配指南 - 实现具备跨端通讯抽象与协议分层治理的流通道架构、支持端侧多维异步指令流管道化实战

Flutter 三方库 stream_channel 的鸿蒙化适配指南 - 实现具备跨端通讯抽象与协议分层治理的流通道架构、支持端侧多维异步指令流管道化实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 stream_channel 的鸿蒙化适配指南 - 实现具备跨端通讯抽象与协议分层治理的流通道架构、支持端侧多维异步指令流管道化实战 前言 在进行 Flutter for OpenHarmony 的复杂通讯系统(如实现自定义的二进制协议、跨进程 IPC 或与嵌入式设备进行长连接)开发时,如何将原始的、读写分离的 IO 映射为统一、双工的指令流?stream_channel 是一款专注于流通讯抽象的核心库。它将一个 Stream(入站)和一个 StreamSink(出站)封装为单一、可组合的对象。本文将探讨如何在鸿蒙端构建极致、清亮的流通讯底座。 一、原直观解析 / 概念介绍 1.1 基础原理 该库建立在“双工通道(

By Ne0inhk
Rust微服务架构实战——gRPC通信、服务发现与容器编排

Rust微服务架构实战——gRPC通信、服务发现与容器编排

第12篇:Rust微服务架构实战——gRPC通信、服务发现与容器编排 一、学习目标与重点 1.1 学习目标 1. 理解微服务架构:深入学习微服务的核心概念、优缺点、架构模式,掌握微服务与单体架构的区别 2. 掌握gRPC通信:熟练使用Tonic(Rust的gRPC实现)定义.proto文件、生成服务端和客户端代码,实现同步/异步通信 3. 实现服务发现与负载均衡:使用Consul或etcd实现服务注册与发现,使用Ribbon或Nginx实现负载均衡 4. 容器编排与部署:学习Docker Swarm或Kubernetes的核心概念,使用Docker Compose或Kubernetes YAML文件部署微服务 5. 实战微服务开发:结合真实场景编写用户管理、订单管理、支付管理三个微服务,实现gRPC通信、服务发现、负载均衡 6. 监控与运维:使用Prometheus+Grafana监控微服务,使用ELK Stack收集和分析日志 1.

By Ne0inhk
【MYSQL】MYSQL学习的一大重点:MYSQL数据类型

【MYSQL】MYSQL学习的一大重点:MYSQL数据类型

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 0 ~> int:最佳实践 * 1 ~> 数据类型分类 * 1.1 数值类型 * 1.2 文本、二进制类型 * 1.3 时间日期 * 1.4 String类型 * 2 ~> 数值类型 * 2.1 TINYINT 类型 * 2.2

By Ne0inhk