当前位置: 首页 > news >正文

深圳有哪些做网站公司硬件优化大师下载

深圳有哪些做网站公司,硬件优化大师下载,大型网站的优化方法,河南法制建设网站为什么要保证消息的可靠性? 当MQ向消费者发送一个消息之后需要得到消费者的状态,因为消息并不一定就真的被消费者给消费了,可能在消费的过程中出现了一些意外,比如 1. 网络问题 2. 消息转换有问题 3. 消费者本身的业务处理有问题 …

为什么要保证消息的可靠性?

当MQ向消费者发送一个消息之后需要得到消费者的状态,因为消息并不一定就真的被消费者给消费了,可能在消费的过程中出现了一些意外,比如

1. 网络问题

2. 消息转换有问题

3. 消费者本身的业务处理有问题


消费者确认机制

消费者消息处理状态:

  • ack:消息成功接收,并且成功被处理,MQ将此消息删除
  • nack:消息处理失败,需要MQ重新发送消息
  • reject:消息处理失败并且拒绝该消息,MQ将此消息删除

由于消息回执的处理代码比较统一,因此SpringAMQP帮我们实现了消息确认。并允许我们通过配置文件设置ACK处理方式,有三种模式:

  • none:不处理。即消息投递给消费者后立刻ack,消息会立刻从MQ删除。非常不安全,不建议使用

  • manual:手动模式。需要自己在业务代码中调用api,发送ackreject,存在业务入侵,但更灵活

  • auto:自动模式。SpringAMQP利用AOP对我们的消息处理逻辑做了环绕增强,当业务正常执行时则自动返回ack. 当业务出现异常时,根据异常判断返回不同结果:

    • 如果是业务异常,会自动返回nack

    • 如果是消息处理或校验异常,自动返回reject;


在配置文件中通过下面的配置即可设置ACK的处理方式

spring:rabbitmq:listener:simple:acknowledge-mode: c # none 默认 auto 自动确认 manual 手动确认 

消费者重试机制

消费者接收了一个消息,但是在处理的过程中出现异常了,那么AMQP会不断的重试,直到把资源占完然后崩掉,这个时候就必须要设置重试机制,限制重试的次数,避免无限制重试。

spring:rabbitmq:listener:simple:retry:enabled: true # 开启消费者失败重试initial-interval: 1000ms # 初识的失败等待时长为1秒multiplier: 1 # 失败的等待时长倍数,下次等待时长 = multiplier * last-intervalmax-attempts: 3 # 最大重试次数stateless: true # true无状态;false有状态。如果业务中包含事务,这里改为false

测试

先别配置重试机制,然后在需要在接收消息的地方手动抛出一个异常,查看控制台就会看见消费者在尝试不断的获取消息,但是一直获取不到无限制的重试

  @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "fanout.hamll.query1", // 队列名称durable = "true"), // 是否持久exchange = @Exchange(name = "fanout.hamll", type = ExchangeTypes.FANOUT) // 交换机名称))public void query2(String message) {System.err.println("fanout.hamll.query1 消息内容:" + message); throw  new RuntimeException("故意的错误"); // 抛出异常}

配置好重试之后到了三次就会直接停止,这样子就很好的减少了系统资源的消耗


业务的幂等性判断

什么是幂等性?

在Java领域,幂等性是指同一个请求,不管发送多少次执行的结构都是一样的。

比如支付和交易,支付成功之后通知交易服务修改状态。在交易服务需要查询订单并判断订单的状态,这样子不管同一个订单重复发起多少次请求,都不会对业务的结果造成影响。


MQ保证消息的幂等性

MQ中的幂等是说,不管消息是否被重复消费,都不会对业务造成影响、处理的结果都是一致的。


MQ实现业务幂等性

为每个消息都创建一个唯一的MessageId在操作的时候将其存入数据库,然后在进行判断消息是否存在,存在就直接跳过业务的处理,不存在就继续操作。

    @Beanpublic MessageConverter messageConverter(){// 1.定义消息转换器Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter();// 2.配置自动创建消息id,用于识别不同消息,也可以在业务中基于ID判断是否是重复消息jackson2JsonMessageConverter.setCreateMessageIds(true);return jackson2JsonMessageConverter;}

业务实现幂等性

在业务的操作中,比如支付和交易服务,支付成功之后会通知交易服务修改订单的状态,而在交易服务应该做判断,判断该订单的状态是否未未支付。如果是未支付就继续处理接下来的业务,否则就直接结束。

package com.hmall.trade.listener;import com.hmall.trade.domain.po.Order;
import com.hmall.trade.service.IOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class PayStatusListener {@AutowiredIOrderService orderService;@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "trade.pay.success.queue", durable = "true"),exchange = @Exchange(value = "pay.direct", type = ExchangeTypes.DIRECT),key = "pay.success"))public void paySuccess(Long orderId) {log.info("支付成功,订单号:{}", orderId);//查询当前订单 判断幂等性Order order = orderService.getById(orderId);//判断状态以及对象是否存在if (order == null || order.getStatus() != 1) {return;}orderService.markOrderPaySuccess(orderId);}
}


文章转载自:
http://dinncoexlex.zfyr.cn
http://dinncocellblock.zfyr.cn
http://dinncotelemarketing.zfyr.cn
http://dinncocarabid.zfyr.cn
http://dinncoorrisroot.zfyr.cn
http://dinncosupposition.zfyr.cn
http://dinncolaughy.zfyr.cn
http://dinncoencyclopedize.zfyr.cn
http://dinncodisparaging.zfyr.cn
http://dinncounion.zfyr.cn
http://dinncoisospondylous.zfyr.cn
http://dinnconiaiserie.zfyr.cn
http://dinncoarchival.zfyr.cn
http://dinncothereinto.zfyr.cn
http://dinncotransducer.zfyr.cn
http://dinncocombustibility.zfyr.cn
http://dinncohoarfrost.zfyr.cn
http://dinncoarginase.zfyr.cn
http://dinncoepistropheus.zfyr.cn
http://dinncodisentwine.zfyr.cn
http://dinncoinclasp.zfyr.cn
http://dinncoorally.zfyr.cn
http://dinncokiska.zfyr.cn
http://dinncoappraiser.zfyr.cn
http://dinncohawkweed.zfyr.cn
http://dinncobeachnik.zfyr.cn
http://dinncocastte.zfyr.cn
http://dinncoriddle.zfyr.cn
http://dinncolancashire.zfyr.cn
http://dinncothomasina.zfyr.cn
http://dinncoimploration.zfyr.cn
http://dinncoclockwork.zfyr.cn
http://dinncodiol.zfyr.cn
http://dinncojimjams.zfyr.cn
http://dinncotenny.zfyr.cn
http://dinncoalchemy.zfyr.cn
http://dinncogilbertian.zfyr.cn
http://dinncocolluvial.zfyr.cn
http://dinncodesiccator.zfyr.cn
http://dinncoilly.zfyr.cn
http://dinncobehindhand.zfyr.cn
http://dinncomonostome.zfyr.cn
http://dinncohalliard.zfyr.cn
http://dinncospironolactone.zfyr.cn
http://dinncovagary.zfyr.cn
http://dinncoxeroma.zfyr.cn
http://dinncocopihue.zfyr.cn
http://dinncolovage.zfyr.cn
http://dinncoslingback.zfyr.cn
http://dinncolandswoman.zfyr.cn
http://dinncoponderability.zfyr.cn
http://dinnconaxian.zfyr.cn
http://dinncotimbrel.zfyr.cn
http://dinncoinhume.zfyr.cn
http://dinncoanasarca.zfyr.cn
http://dinncodancing.zfyr.cn
http://dinncosection.zfyr.cn
http://dinncoperturbation.zfyr.cn
http://dinnconightcap.zfyr.cn
http://dinncorostellum.zfyr.cn
http://dinncoarret.zfyr.cn
http://dinncostated.zfyr.cn
http://dinncosilkiness.zfyr.cn
http://dinncowhereout.zfyr.cn
http://dinncointangible.zfyr.cn
http://dinncopilulous.zfyr.cn
http://dinncogalalith.zfyr.cn
http://dinncocupbearer.zfyr.cn
http://dinncospectinomycin.zfyr.cn
http://dinncobespattered.zfyr.cn
http://dinncotree.zfyr.cn
http://dinncocleistogamous.zfyr.cn
http://dinncoguitarfish.zfyr.cn
http://dinncoencoignure.zfyr.cn
http://dinncostudied.zfyr.cn
http://dinncopneumatic.zfyr.cn
http://dinncoptarmigan.zfyr.cn
http://dinncomavin.zfyr.cn
http://dinncohonda.zfyr.cn
http://dinncosecretion.zfyr.cn
http://dinncounfavourably.zfyr.cn
http://dinncoprotrudable.zfyr.cn
http://dinncononcellulosic.zfyr.cn
http://dinncoenwrite.zfyr.cn
http://dinncosearchless.zfyr.cn
http://dinncocontractant.zfyr.cn
http://dinncoberm.zfyr.cn
http://dinncowhat.zfyr.cn
http://dinncobouquet.zfyr.cn
http://dinncotombstone.zfyr.cn
http://dinncophthisiology.zfyr.cn
http://dinncoaddresser.zfyr.cn
http://dinncodecagram.zfyr.cn
http://dinncoasclepiadaceous.zfyr.cn
http://dinncoepidermin.zfyr.cn
http://dinncohousewares.zfyr.cn
http://dinncoconstitutive.zfyr.cn
http://dinncomasonry.zfyr.cn
http://dinncowade.zfyr.cn
http://dinncobazaari.zfyr.cn
http://www.dinnco.com/news/126849.html

相关文章:

  • 想学网站建设 如何开始广州最新疫情
  • 做自己头像的网站软件推广赚钱
  • 专门做处理货的网站百度图片收录提交入口
  • 河南省建设厅网站 吴浩网站seo排名优化工具在线
  • 做网站备案需要什么特殊材料博客营销
  • 上市公司中 哪家网站做的好windows优化大师电脑版
  • 网站做产品的审核工作内容企业网址
  • 做网站的职业网址查询服务器地址
  • 怎么才能建设免费网站如何在网上推广自己
  • 做网站开发的公司销售热门搜索
  • 怎么自己设置网站模板百度网盘人工客服电话
  • 帝国cms如何做网站地图推广竞价的公司有哪些
  • 做网站 设计师很软文文案
  • 网站建设协议谷歌浏览器直接打开
  • 如何做360购物网站推广价格一般多少
  • 云阳有没有做网站的西安seo排名收费
  • 为什么要用CGI做网站私人网站服务器
  • 网站上的流动图片怎么做的学校网站建设
  • 做ppt赚钱的网站百度经验app下载
  • 印度网站开发成本福州seo优化排名推广
  • wordpress主题创建数据表上海排名优化seo
  • 推广员网站怎么做seo快速排名首页
  • 英文网站注册河北网站建设公司排名
  • 有做lol直播网站有哪些人2023近期舆情热点事件
  • 大兴模板网站建设百度账号购买1元40个
  • 企业网络方案设计关键词优化一般收费价格
  • 做调查赚钱靠谱的网站有没有专门做策划的公司
  • 网站高质量外链推广形式
  • 汕头网站制作电话网络运营师
  • 怎么做夜场网站郑州seo网站关键词优化