首页 > 其他分享 >谷粒商城实战笔记-259-商城业务-消息队列-可靠投递-发送端确认

谷粒商城实战笔记-259-商城业务-消息队列-可靠投递-发送端确认

时间:2024-08-26 11:54:31浏览次数:10  
标签:事务 ack 确认 RabbitMQ 发送 259 谷粒 商城 消息

文章目录

一,确认机制简介

在这里插入图片描述
RabbitMQ的消息确认机制主要包括以下几种:

  1. 发布者确认(Publisher Confirm):在发布者和代理之间建立一个确认协议。当发布者发送一条消息到代理时,代理会返回一个确认信息给发布者。如果确认信息是positive ack(即确认收到),那么表示消息已经被代理成功接收;如果是negative ack(即拒绝或丢失),则表示消息没有被正确处理。

  2. 返回回调(Return Callback):当发布者发送的消息无法路由到任何队列时,代理会将该消息返回给发布者。

  3. 消费者确认(Consumer Acknowledgments):消费者在处理完消息后向代理发送一个确认信息,告诉代理消息已被正确处理。如果没有收到确认信息,代理会重新投递该消息。

二,ConfirmCallback

在这里插入图片描述

生产者的确认(Publisher Confirms)是一种机制,用于确保消息已经成功传递到RabbitMQ broker。当启用此功能时,生产者在发送消息后会收到一个确认,以表明消息已成功到达broker。

以下是启用和使用生产者确认的一些关键点:

  1. 配置Spring RabbitMQ以启用确认:
    application.properties文件中设置spring.rabbitmq.publisher-confirms=true。这将在创建ConnectionFactory时设置PublisherConfirms(true)选项,从而开启confirm callback。

  2. CorrelationData:
    CorrelationData是一个用来表示当前消息唯一性的对象。每当生产者发送一条消息时,它应该提供一个唯一的CorrelationData实例,这样在确认回调中就可以识别出哪条消息得到了确认。

  3. confirmCallback:
    当消息被broker接收到时,将会调用confirmCallback方法。如果ack参数为true,这意味着消息已被成功接受并处理;如果ack参数为false,这意味着消息未被成功处理,可能是由于某种原因被丢弃。

  4. 使用示例:

    
    public void initRabbitTemplate() {
    
         /**
          * 1、只要消息抵达Broker就ack=true
          * correlationData:当前消息的唯一关联数据(这个是消息的唯一id)
          * ack:消息是否成功收到
          * cause:失败的原因
          */
         //设置确认回调
         rabbitTemplate.setConfirmCallback((correlationData,ack,cause) -> {
             System.out.println("confirm...correlationData["+correlationData+"]==>ack:["+ack+"]==>cause:["+cause+"]");
         });
    
    

通过这种方式,生产者可以在发送消息后立即知道消息是否成功到达RabbitMQ broker,从而实现可靠的通信。

三,returnCallback

在这里插入图片描述
returnCallback是在RabbitMQ中使用的一种机制,用于处理无法路由到任何队列的消息。当生产者发送的消息不能被正确路由到任何队列时,RabbitMQ会将该消息返回给生产者。这时,生产者可以通过注册一个returnCallback来监听这些返回的消息。

以下是关于returnCallback的一些要点:

  1. 配置Spring RabbitMQ以启用返回回调:
    application.properties文件中设置spring.rabbitmq.publisher-returns=true。这将在创建ConnectionFactory时设置PublisherReturns(true)选项,从而开启return callback。

  2. returnCallback:
    当消息无法路由到任何队列时,RabbitMQ会触发returnCallback。在回调中,你可以获取到消息的内容、原始交换器、路由键和返回代码/描述。

  3. 使用示例:

    public void initRabbitTemplate() {
         /**
          * 只要消息没有投递给指定的队列,就触发这个失败回调
          * message:投递失败的消息详细信息
          * replyCode:回复的状态码
          * replyText:回复的文本内容
          * exchange:当时这个消息发给哪个交换机
          * routingKey:当时这个消息用哪个路邮键
          */
         rabbitTemplate.setReturnCallback((message,replyCode,replyText,exchange,routingKey) -> {
             System.out.println("Fail Message["+message+"]==>replyCode["+replyCode+"]" +
                     "==>replyText["+replyText+"]==>exchange["+exchange+"]==>routingKey["+routingKey+"]");
         });
     }
    

通过returnCallback,生产者可以及时得知哪些消息无法被正确路由,并采取相应的措施,例如重试发送、记录日志或通知管理员等。这样可以提高系统的健壮性,并减少因消息无法送达而导致的问题。

事务消息的问题

事务消息是指在RabbitMQ中,生产者可以开启一个事务,然后在这个事务中发送多条消息。只有当所有的消息都成功到达队列之后,这个事务才会被提交。如果其中有任何一条消息未能成功到达队列,则整个事务会被回滚,所有的消息都不会被放入队列。

这种机制确保了消息的可靠性,但是同时也带来了性能上的问题。

首先,事务机制引入了大量的同步操作。在开启事务之后,生产者发送的所有消息都需要等待服务器的确认才能继续执行。这就意味着,生产者的发送速度受到了服务器响应速度的限制,而服务器的响应速度又受到当前系统负载的影响。因此,当系统负载较高或者网络延迟较大时,生产者的发送速度就会显著降低。

其次,事务机制增加了数据存储的压力。在事务期间,服务器需要为每个事务维护一个状态,以便在事务结束时决定是否要提交还是回滚。这对于内存和磁盘空间都是一个消耗。

最后,事务机制还增加了网络传输的开销。由于每次发送消息都需要等待服务器的确认,这就导致了大量的网络交互,增加了网络带宽的消耗。

综上所述,虽然事务消息提供了很高的可靠性和一致性,但是在高并发和大数据量的情况下,它的性能表现可能会比较差。因此,在实际应用中,我们需要根据具体的需求来权衡可靠性和性能之间的关系,选择合适的解决方案。

标签:事务,ack,确认,RabbitMQ,发送,259,谷粒,商城,消息
From: https://blog.csdn.net/epitomizelu/article/details/141540370

相关文章

  • 谷粒商城实战笔记-260-商城业务-消息队列-可靠投递-消费端确认
    文章目录一,Ack消息确认机制简介1,简介2,两个常用的Api二,消费者端消息确认实战三,RabbitMQ可靠性保障总结1,生产者2,消费者一,Ack消息确认机制简介消费者端的确认机制(ACK/NACK)是RabbitMQ中一种重要的特性,它允许消费者告知Broker它们是否成功处理了接收到的......
  • 免费分享一套Java协同过滤推荐算法的SpringBoot+Vue(图书)商城系统【论文+源码+SQL脚
    大家好,我是java1234_小锋老师,看到一个不错的Java协同过滤推荐算法的SpringBoot+Vue(图书)商城系统,分享下哈。项目视频演示【免费】Java协同过滤推荐算法的SpringBoot+Vue(图书)商城系统Java毕业设计_哔哩哔哩_bilibili项目介绍伴随着Internet的蓬勃发展,电子商务也取得了......
  • 基于javaweb+jsp的鲜花商城系统
    基于javaweb+jsp的鲜花商城系统的设计与实现~开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+JSP工具:IDEA/Ecilpse、Navicat、Maven系统展示前台后台摘要  当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈......
  • SSM水果商城系统 毕业设计-附源码
    摘要网络购物作为一种全新的销售方式赢得了越来越多销售者的青睐,近年来销售额更是以连年翻番的惊人速度成倍增长.网络购物已经形成了自身特有的网络销售市场和全新的网络营销模式,也使网络营销渠道应运而生.同时,伴随着水果市场的不断扩大,水果行业内的竞争日趋激烈,网络营销......
  • 从多维度视角探讨“开源AI智能名片O2O商城小程序”的设计与管理
    摘要:在数字化转型的浪潮中,产品设计与管理已成为企业竞争力的核心要素。本文旨在从产品设计、产品管理及产品文化三个维度,深入探讨“开源AI智能名片O2O商城小程序”的设计理念与实践策略。通过强调设计即沟通的原则,本文分析了直接控制产品细节的人员如何与用户建立有效沟通渠道,......
  • 私域流量的落脚点与开源 AI 智能名片 2+1 链动商城小程序
    摘要:本文探讨了私域流量的重要性及其落脚点,分析了快钱收割思维在私域流量运作中的弊端。同时,引入开源AI智能名片2+1链动商城小程序,阐述其在成就人格化IP和打造品牌域、通过直播电商规模化变现方面的作用,为企业私域流量的有效运营提供参考。一、引言在当今数字化时代,私......
  • 毕业设计-基于SpringMVC的农产品土特产商城管理系统
    一、项目介绍        基于SpringMVC的农产品土特产商城管理系统分为前端用户端和后台管理系统。        用户端包括注册登录、查看商品列表、查看商品详情、商品加入购物车、购物车结算、评价商品、查看我的订单、编辑个人资料、留言、查看浏览历史等。商品......
  • 毕业设计基于SSM/Springboot的商城项目
    一、前言博主介绍:提供有偿定制化修改疑难代码问题,也可以私信,包括问题定位,代码运行,后台留言答疑[承接Java毕设]。API接口访问http://127.0.0.1:8081/shop/swagger-ui.html管理员访问http://127.0.0.1:8081/shop/admin/login普通用户访问http://127.0.0.1:8081/sh......
  • 【微信小程序开发】栀子手作花花微信小程序商城开发最佳实践
    本文介绍了通过uniapp技术实现了一套栀子手作在线购物商城系统。包含首页、分类、我的等常用功能入口。一、功能演示首页:包含了商品介绍,领劵中心和商品列表区域。商品分类:支持不同的商品分类和商品搜素。商品详情:包含了商品详细的描述信息,透出了分享、首页、客服等入口。......
  • 技术分享-商城篇-用户订单管理(十五)
    前言在前面的文章中,我们详细阐述了商品模块、购物模块、支付模块等B2B2C(Business-to-Business-to-Consumer)电商中核心基础模块,接下来我们来聊一下基础模块中最后一个环节订单模块,订单模块属于购物体系闭环内容,也是必不可少的基础模块,它承接着后续业务操作,如售后、发货、订......