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

手机网站打开手机app网站建设中最重要的

手机网站打开手机app,网站建设中最重要的,弄一个网站多少钱,建设银行官方网站首页1. 简介 在消息传递时,有可能会因为网络故障、内存资源不足等不可控原因,导致消息没有成功发送出去,这时我们就可以选择将这条消息进行重新发送。能够重新发送的前提是代码逻辑没有问题。 2. 需要的配置 spring:rabbitmq:listener:simple:…

1. 简介

在消息传递时,有可能会因为网络故障、内存资源不足等不可控原因,导致消息没有成功发送出去,这时我们就可以选择将这条消息进行重新发送。能够重新发送的前提是代码逻辑没有问题。

2. 需要的配置

spring:rabbitmq:listener:simple:acknowledge-mode: autoretry:enabled: true # 开启消费者失败重试initial-interval: 5000ms # 初始失败等待时⻓为5秒max-attempts: 5 # 最⼤重试次数(包括自身消费的⼀次)

在配置信息中设置了消息的重发次数,该次数包括一开始生产者发送消息的那一次。

这里我们需要注意,在使用重试机制时,需要搭配 auto 使用,原因下面进行讲解。

3. auto 与重试机制搭配使用的结果

生产者代码如下:

@RequestMapping("/producer")
@RestController
public class ProducerController {@Resource(name = "rabbitTemplate")private RabbitTemplate rabbitTemplate;/*** 重试机制*/@RequestMapping("/retry")public String retry() {String message = "retry test...";rabbitTemplate.convertAndSend(Constants.RETRY_EXCHANGE, Constants.RETRY_ROUTINGKEY, message);return "消息发送成功";}
}

对于无异常版本的消费者代码,其代码运行结果即正常消费消息,下面只使用有异常版本的消费者代码:

@Slf4j
@Component
public class RetryListener {@RabbitListener(queues = Constants.RETRY_QUEUE)public void listener(Message message) {String messageInfo = new String(message.getBody());long deliveryTag = message.getMessageProperties().getDeliveryTag();log.info("接收消息, message: {}, deliveryTag: {}", messageInfo, deliveryTag);int num = 1 / 0;log.info("消息消费完成");}
}

代码运行结果如下:

由于在消费者代码中出现了除数为 0 的错误,于是消息就消费失败,触发了消息重发机制后兄奥西重发了 4 次,消息一共发送了 5 次。并且在日志中可以看出,这些消息的 deliveryTag 都是相同的。

4. manual 与 重试机制搭配使用的结果

将配置文件的 acknowledge-mode 修改为 manual,并在消费者代码中添加 basicAck 和 basicNack,代码如下:

@Slf4j
@Component
public class RetryListener {@RabbitListener(queues = Constants.RETRY_QUEUE)public void listener(Message message, Channel channel) throws IOException {String messageInfo = new String(message.getBody());long deliveryTag = message.getMessageProperties().getDeliveryTag();try {log.info("接收消息, message: {}, deliveryTag: {}", messageInfo, deliveryTag);int num = 1 / 0;log.info("消息消费完成");channel.basicAck(deliveryTag, false);} catch (Exception e) { //此处的异常必须包含 除数为 0 的异常,不然就不会进入到 catch 中,就导致不会执行 basicNack 方法,就无法将消息重新入队列channel.basicNack(deliveryTag, false, true);}}
}

代码运行结果如下:

从结果中可以看出,虽然设置了重发次数为5次,但是 deliveryTag 却一直在递增,就表示该消息一直在入队列并发送,没有受到重发机制的限制。

所以在重试机制下,搭配 auto 确认模式使用才能发挥效果。

http://www.dtcms.com/wzjs/534645.html

相关文章:

  • 专业网站建设公司兴田德润简介网站推广的几个阶段
  • 网站开发自学难吗有什么网站可以做毕业影像
  • 网站建设动态页面修改删除玻璃制品东莞网站建设
  • 怎么用自己的网站做网页西安网站维护
  • 杭州知名网站制作公司寻找网络公司做公司网站升级改版
  • lamp 做网站惠州市博罗县建设局网站
  • 深圳做网站要服务器地址怎么查询
  • 政协机关网站建设wordpress concise
  • 郴州网站建设ku0735青海兴远建设工程有限公司网站
  • 旅游网站营销装饰工程规范
  • 建筑网站大图wordpress 几百万数据
  • 网站的seo方案用flash做的网站展示
  • 网站怎样运营wordpress企业教程
  • 重庆的主要的网站遵义网约车租车公司
  • 深圳网站定制多少钱开发电子商务网站和开发新闻类网站什么异同
  • 阿里云个人网站建设方案书wordpress图片缓冲
  • 纯静态网站制作免费虚拟主机空间申请
  • 网站建设 总体思路动漫设计与制作工资多少
  • 深圳官网建站服务商wordpress主题字体用隶书
  • 皮具网站设计湛江网页设计培训
  • 怎么做系统软件网站商城网站建设行情
  • dw进行网站建设包含哪些步骤微信小程序商城怎么开发
  • 网站导航界面重庆百度搜索优化
  • 江苏建设科技网站wordpress 提取文章段落
  • 建站工作室源码做ppt卖给网站
  • 南宁伯才网络建站如何注册小程序要多少钱
  • 网站修改图片怎么做单页网站如何做cpa
  • 翻译类公司网站模板做网站运营有前途吗
  • 网站设计公司排行榜wordpress导航设置
  • 网站游戏网站开发阿里巴巴网站建设初衷