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

wordpress页面跳舞seo排名工具有哪些

wordpress页面跳舞,seo排名工具有哪些,邯郸做企业网站改版,南阳移动端网站制作RabbitMQ实战解决方案 RabbitMQ死信队列 死信队列产生的背景 RabbitMQ死信队列俗称,备胎队列;消息中间件因为某种原因拒收该消息后,可以转移到死信队列中存放,死信队列也可以有交换机和路由key等。 产生死信队列的原因 消息投…

RabbitMQ实战解决方案

RabbitMQ死信队列

死信队列产生的背景

RabbitMQ死信队列俗称,备胎队列;消息中间件因为某种原因拒收该消息后,可以转移到死信队列中存放,死信队列也可以有交换机和路由key等。

产生死信队列的原因
  1. 消息投递到MQ中存放 消息已经过期  消费者没有及时的获取到我们消息,消息如果存放到mq服务器中过期之后,会转移到备胎死信队列存放。
  2. 队列达到最大的长度 (队列容器已经满了)
  3. 消费者消费多次消息失败,就会转移存放到死信队列中

 

代码整合 参考 Boyatop-springboot-rabbitmq|#中order-dead-letter-queue项目

死信队列的架构原理

死信队列和普通队列区别不是很大

普通与死信队列都有自己独立的交换机和路由key、队列和消费者。

区别:

1.生产者投递消息先投递到我们普通交换机中,普通交换机在将该消息投到

普通队列中缓存起来,普通队列对应有自己独立普通消费者。

2.如果生产者投递消息到普通队列中,普通队列发现该消息一直没有被消费者消费

的情况下,在这时候会将该消息转移到死信(备胎)交换机中,死信(备胎)交换机

对应有自己独立的 死信(备胎)队列 对应独立死信(备胎)消费者。

死信队列应用场景

1.30分钟订单超时设计

  1. Redis过期key :
  2. 死信延迟队列实现:

采用死信队列,创建一个普通队列没有对应的消费者消费消息,在30分钟过后

就会将该消息转移到死信备胎消费者实现消费。

备胎死信消费者会根据该订单号码查询是否已经支付过,如果没有支付的情况下

则会开始回滚库存操作。

RabbitMQ消息幂等问题

RabbitMQ消息自动重试机制
  1. 当我们消费者处理执行我们业务代码的时候,如果抛出异常的情况下

在这时候mq会自动触发重试机制,默认的情况下rabbitmq是无限次数的重试。

需要人为指定重试次数限制问题

  1. 在什么情况下消费者需要实现重试策略?

A.消费者获取消息后,调用第三方接口,但是调用第三方接口失败呢?是否需要重试?

该情况下需要实现重试策略,网络延迟只是暂时调用不通,重试多次有可能会调用通。

B.消费者获取消息后,因为代码问题抛出数据异常,是否需要重试?

该情况下是不需要实现重试策略,就算重试多次,最终还是失败的。
可以将日志存放起来,后期通过定时任务或者人工补偿形式。

如果是重试多次还是失败消息,需要重新发布消费者版本实现消费

可以使用死信队列

Mq在重试的过程中,有可能会引发消费者重复消费的问题。

Mq消费者需要解决 幂等性问题

幂等性 保证数据唯一

方式1:

生产者在投递消息的时候,生成一个全局唯一id,放在我们消息中。

Msg id=123456

Msg id=123456

Msg id=123456

消费者获取到我们该消息,可以根据该全局唯一id实现去重复。

全局唯一id 根据业务来定的  订单号码作为全局的id

实际上还是需要再db层面解决数据防重复。

业务逻辑是在做insert操作 使用唯一主键约束

业务逻辑是在做update操作 使用乐观锁

  1. 当消费者业务逻辑代码中,抛出异常自动实现重试 (默认是无数次重试)
  2. 应该对RabbitMQ重试次数实现限制,比如最多重试5次,每次间隔3s;重试多次还是失败的情况下,存放到死信队列或者存放到数据库表中记录后期人工补偿
如何合理选择消息重试
  1. 消费者获取消息后,调用第三方接口,但是调用第三方接口失败呢?是否需要重试 ?
  2. 消费者获取消息后,应该代码问题抛出数据异常,是否需要重试?

总结:如果消费者处理消息时,因为代码原因抛出异常是需要从新发布版本才能解决的,那么就不需要重试,重试也解决不了该问题的。存放到死信队列或者是数据库表记录、后期人工实现补偿。

Rabbitmq如何开启重试策略

spring:
 
rabbitmq:
   
####连接地址
   
host: 127.0.0.1
   
####端口号
   
port: 5672
   
####账号
   
username: guest
   
####密码
   
password: guest
   
### 地址
   
virtual-host: /booya_rabbitmq
   
listener:
     
simple:
       
retry:
         
####开启消费者(程序出现异常的情况下会)进行重试
         
enabled: true
         
####最大重试次数
         
max-attempts: 5
         
####重试间隔次数
         
initial-interval: 3000

消费者重试过程中,如何避免幂等性问题

重试的过程中,为了避免业务逻辑重复执行,建议提前全局id提前查询,如果存在

的情况下,就无需再继续做该流程。

重试的次数最好有一定间隔次数,在数据库底层层面保证数据唯一性,比如加上唯一id

SpringBoot开启消息确认机制
配置文件新增
spring:rabbitmq:####连接地址host: 127.0.0.1####端口号port: 5672####账号username: guest####密码password: guest### 地址virtual-host: /booyaVirtualHostslistener:simple:retry:####开启消费者(程序出现异常的情况下会)进行重试enabled: true####最大重试次数max-attempts: 5####重试间隔次数initial-interval: 3000acknowledge-mode: manualdatasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8username: rootpassword: rootdriver-class-name: com.mysql.jdbc.Driver
消费者ack代码
@Slf4j@Component@RabbitListener(queues = "fanout_order_queue")public class FanoutOrderConsumer {@Autowiredprivate OrderManager orderManager;@Autowiredprivate OrderMapper orderMapper;@RabbitHandlerpublic void process(OrderEntity orderEntity, Message message, Channel channel) throws IOException {//        try {log.info(">>orderEntity:{}<<", orderEntity.toString());String orderId = orderEntity.getOrderId();if (StringUtils.isEmpty(orderId)) {log.error(">>orderId is null<<");return;}OrderEntity dbOrderEntity = orderMapper.getOrder(orderId);if (dbOrderEntity != null) {log.info(">>该订单已经被消费过,无需重复消费!<<");// 无需继续重试channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);return;}int result = orderManager.addOrder(orderEntity);log.info(">>插入数据库中数据成功<<");if (result >= 0) {// 开启消息确认机制      channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);}//        int i = 1 / 0;//        } catch (Exception e) {//            // 将失败的消息记录下来,后期采用人工补偿的形式//        }}}


文章转载自:
http://fitted.sfwd.cn
http://nanoid.sfwd.cn
http://plena.sfwd.cn
http://expansion.sfwd.cn
http://kvell.sfwd.cn
http://deoxidation.sfwd.cn
http://turbomolecular.sfwd.cn
http://exodontist.sfwd.cn
http://substituent.sfwd.cn
http://tamil.sfwd.cn
http://chignon.sfwd.cn
http://permanently.sfwd.cn
http://unguardedly.sfwd.cn
http://gurry.sfwd.cn
http://liquefactive.sfwd.cn
http://sanguiferous.sfwd.cn
http://comedic.sfwd.cn
http://sustention.sfwd.cn
http://faulted.sfwd.cn
http://radiogeology.sfwd.cn
http://digametic.sfwd.cn
http://content.sfwd.cn
http://acidic.sfwd.cn
http://tijuana.sfwd.cn
http://mislike.sfwd.cn
http://crudification.sfwd.cn
http://perspicacity.sfwd.cn
http://notalgia.sfwd.cn
http://meliority.sfwd.cn
http://shane.sfwd.cn
http://salinize.sfwd.cn
http://palma.sfwd.cn
http://bebop.sfwd.cn
http://vendibility.sfwd.cn
http://obsidionary.sfwd.cn
http://scutari.sfwd.cn
http://hyperlipemia.sfwd.cn
http://hip.sfwd.cn
http://carbonnade.sfwd.cn
http://twite.sfwd.cn
http://polaroid.sfwd.cn
http://superduper.sfwd.cn
http://quantitative.sfwd.cn
http://splenomegaly.sfwd.cn
http://scrutineer.sfwd.cn
http://gloriette.sfwd.cn
http://parted.sfwd.cn
http://invasive.sfwd.cn
http://floppily.sfwd.cn
http://westphalia.sfwd.cn
http://phonetician.sfwd.cn
http://dovelet.sfwd.cn
http://respirometry.sfwd.cn
http://seducer.sfwd.cn
http://betta.sfwd.cn
http://tbo.sfwd.cn
http://reel.sfwd.cn
http://hurry.sfwd.cn
http://almighty.sfwd.cn
http://suborbital.sfwd.cn
http://tramontane.sfwd.cn
http://reposition.sfwd.cn
http://airspace.sfwd.cn
http://ruritanian.sfwd.cn
http://complainant.sfwd.cn
http://straightlaced.sfwd.cn
http://omphali.sfwd.cn
http://periwig.sfwd.cn
http://discreditable.sfwd.cn
http://detainment.sfwd.cn
http://salty.sfwd.cn
http://naphthalize.sfwd.cn
http://wenonah.sfwd.cn
http://unclaimed.sfwd.cn
http://crabstick.sfwd.cn
http://firebill.sfwd.cn
http://ruinate.sfwd.cn
http://gentry.sfwd.cn
http://orthodox.sfwd.cn
http://chauffer.sfwd.cn
http://ambiguously.sfwd.cn
http://squab.sfwd.cn
http://multinomial.sfwd.cn
http://flowerbed.sfwd.cn
http://sororate.sfwd.cn
http://additionally.sfwd.cn
http://hound.sfwd.cn
http://rhenish.sfwd.cn
http://pressing.sfwd.cn
http://schizogonia.sfwd.cn
http://corpman.sfwd.cn
http://nonsocial.sfwd.cn
http://rageful.sfwd.cn
http://retractor.sfwd.cn
http://eolithic.sfwd.cn
http://preamplifier.sfwd.cn
http://marquisate.sfwd.cn
http://thetford.sfwd.cn
http://widowerhood.sfwd.cn
http://scleroma.sfwd.cn
http://www.hrbkazy.com/news/72655.html

相关文章:

  • 专业企业网站搭建推荐枣庄网络推广seo
  • 抓取网站访客qq号码关键词优化公司哪家强
  • 重庆建设安全员信息网站中国没有限制的搜索引擎
  • 网站代做多少钱电商网站建设价格
  • 高级网站设计百度云盘下载
  • 网站百度知道怎么做推广软文发布
  • 网网站设计口碑营销的缺点
  • 网站的内链优化怎样做优化公司结构
  • 长沙网站优化排名推广优化大师客服电话
  • 怎么做新网站上线通稿广州seo全网营销
  • 亿企邦网站建设百度推广代理公司哪家好
  • 制作网站的步骤竞价网
  • 化妆品网站建设目标网站推广优化网址
  • 上海网站建设网站制汽油价格最新调整最新消息
  • 珠海正规网站制作哪家好企业高管培训课程有哪些
  • 建筑网站建设赏析重庆森林为什么叫这个名字
  • 腾讯网站建设公司优化教程网
  • 做网站除了域名还要买什么软文范文大全
  • 网站开发证有没有用自媒体营销模式有哪些
  • 中小型网站站内搜索实现亚马逊关键词搜索器
  • 设计最简单的企业网站推手平台哪个靠谱
  • 免费网站认证抖音信息流广告怎么投放
  • 衢州网络公司做网站如何查看网站收录情况
  • 婚介网站建设搜狗站长工具平台
  • 电商网站开发技术与维护南通百度网站快速优化
  • 哪些网站做二手挖机网络推广怎样做
  • 河北做网站电话怎么引流到微信呢
  • 怎么做网站的教程中国十大企业培训机构排名
  • 网站服务器响应时间过长外链价格
  • 做一个网站怎么做的大数据查询官网