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

Lostlife2.0下载官网整合LLama-Factory引擎,增强NPC对话逻辑

Lostlife2.0整合LLama-Factory引擎,重塑NPC对话逻辑 在文字冒险游戏的世界里,玩家最怕什么?不是任务太难,也不是剧情平淡——而是和一个“话术机械、反应呆板”的NPC对话时,那种瞬间出戏的割裂感。明明世界观设定是末世废土,结果NPC张口就是“绝绝子”“破防了”,这种语言风格的崩塌足以让沉浸感荡然无存。 《Lostlife2.0》作为一款以深度叙事和角色互动为核心卖点的文字冒险游戏,在开发过程中就直面了这一难题。早期版本中,NPC的对话依赖传统的决策树系统:每句台词都由编剧手动编写,每个分支都需要精确配置。这不仅导致内容维护成本极高,更带来了“选项爆炸”问题——新增一条剧情线,往往要额外添加数十个节点,最终形成一张难以管理的复杂网络。 真正的转机出现在团队引入 LLama-Factory 之后。这个开源的大模型微调框架,原本主要用于科研与企业级AI定制,但《Lostlife2.0》团队敏锐地意识到:它或许能成为解决NPC智能瓶颈的关键工具。通过将LLama-Factory深度集成到开发流程中,他们成功构建了一套动态、可进化、风格一致的对话生成系统,彻底改变了传

By Ne0inhk

vscode中远程连接不显示copilot chat图标

前提: 1、有授权的Copilot的github账号(学生认证或购买),vscode已登录账号 2、远程主机已安装Github Copilot和Github Copilot Chat插件 现象: 左侧工具栏没有copilot chat的图标 解决: 打开vscode设置(setting),在设置中搜索"extension kind",点击settings.json 在"remote.extensionKind"中添加: "remote.extensionKind":{"GitHub.copilot":["ui"],"GitHub.copilot-chat":["ui"]} 重启vscode可看见chat图标 参考: 快速解决vscode远程连接时copilot提示脱机状态无法使用的问题

By Ne0inhk
在昇腾NPU上跑Llama 2模型:一次完整的性能测试与实战通关指南

在昇腾NPU上跑Llama 2模型:一次完整的性能测试与实战通关指南

目录 * 在昇腾NPU上跑Llama 2模型:一次完整的性能测试与实战通关指南 * 引言:从“为什么选择昇腾”开始 * 第一幕:环境搭建——好的开始是成功的一半 * 1.1 GitCode Notebook 创建“避坑指南” * 1.2 环境验证:“Hello, NPU!” * 第二幕:模型部署——从下载到运行的“荆棘之路” * 2.1 安装依赖与模型下载 * 2.2 核心部署代码与“坑”的化解 * 第三幕:性能测试——揭开昇腾NPU的真实面纱 * 3.1 严谨的性能测试脚本 * 3.2 测试结果与分析 * 第四幕:性能优化——让Llama跑得更快 * 4.1 使用昇腾原生大模型框架 * 4.

By Ne0inhk

Claude Code的完美平替:OpenCode + GitHub Copilot

引言:Claude 虽好,但你真的能用上吗? 在当前席卷全球的“Vibe Coding”浪潮中,Anthropic 推出的 Claude 系列模型 + 终端工具 Claude Code,凭借极强的逻辑推理能力,成为了开发者眼中的“白月光”。但现实是残酷的:对于中国开发者而言,账号随时被封、海外信用卡支付遭拒、API 额度受限以及复杂的网络环境,构成了一道难以逾越的门槛。 虽然最近国产编程模型不断发力,Claude Code + GLM-4.7的表现非常出色,但面对复杂问题,Claude系列模型依然完胜。难道我们只能眼馋Claude全家桶的编程体验吗? 作为一名追求极致生产力的开发者,我发现了一个绝佳的完美替代方案:OpenCode + GitHub Copilot。这个组合不仅能让你享受如 GLM-4.7 一样的性价比,还能更方便的使用 Claude 的顶级模型。 Claude Code 的开源免费平替:OpenCode 想要复刻

By Ne0inhk