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

网站报纸什么软件做东莞网络优化调查公司

网站报纸什么软件做,东莞网络优化调查公司,安卓模仿网站开发详细教程,简单网页制作素材图片一、应答模式 RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。(一般交换机发送消息,RabbitMQ只有在接收到消费者的确认后才…

一、应答模式

RabbitMQ 中的消息应答模式主要包括两种:自动应答(Automatic Acknowledgement)和手动应答(Manual Acknowledgement)。(一般交换机发送消息,RabbitMQ只有在接收到消费者的确认后才会将消息从队列中删除。)在队列发送消息时,首先会先复制一份给消费者,在收到消费者的确认消息后,队列才会将队列中的消息删除。

1、自动应答

不在乎消费者对消息处理是否成功,都会告诉队列删除消息。如果处理消息失败,实现自动补偿(队列投递过去 重新处理)。

2、手动应答

  1. 在手动应答模式下,消费者在接收到消息后并不会立即向RabbitMQ确认消息已处理完毕。消费者需要显式调用basicAck方法来确认消息处理完成,RabbitMQ只有在接收到消费者的确认后才会将消息从队列中删除。

  2. 采用手动应答可以提高消息的可靠性,即使消费者在处理消息过程中出现问题,只要未发送ack确认,RabbitMQ会在重新连接后再次将消息发送给该消费者。

  3. 如果消费者在处理消息前断开了连接,或者在处理消息期间抛出了未捕获的异常,RabbitMQ会认为消息未被正确处理,从而重新排队消息,确保消息至少会被消费一次(at least once delivery)。

 二、SpringBoot如何实现两种应答。

1、自动应答

在Spring Boot的配置文件application.properties中,对于RabbitMQ监听器,设置自动应答模式(默认就是自动应答)

可以在配置文件中设置自动应答

# 自动应答模式
spring.rabbitmq.listener.simple.acknowledge-mode = auto
@Component
public class AutoAcknowledgementConsumer {@RabbitListener(queues = "yourQueue")public void consumeMessage(String message, Message amqpMessage) {// 处理消息...// 框架会在方法执行完成后自动发送ack确认消息}
}

自动应答的效果:开启自动应答如果出现异常,消费者没有返回确认信息,交换机就会不停发送消息。

 会不停的发送请求

 

2、 手动应答

首先,同样在配置文件中启用手动应答模式

# 手动应答模式
spring.rabbitmq.listener.simple.acknowledge-mode = manual
  @RabbitListener(queues = "direct_01")public void receiveMessage(Ordering ordering, Message message, Channel channel) throws IOException {long deliveryTag = message.getMessageProperties().getDeliveryTag();System.out.println("消费者434接收到消息:" + ordering);try {// 处理成功手动发送ack确认,yesint i = 5 / 0;channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);} catch (Exception e) {// 处理失败,可以选择重试或拒绝消息(basicNack或basicReject)channel.basicNack(deliveryTag, false, false); // b表示是否批量,b1表示是否并重新入队,选择不重新入队后消息便会丢失}}

3.如何解决死循环?重试机制

#应答模式 手动应答需要开发者手动应答
spring.rabbitmq.listener.simple.acknowledge-mode=AUTO#批量预抓取数量,提高执行效率
spring.rabbitmq.listener.simple.prefetch = 10
#开启消费者重试机制
spring.rabbitmq.listener.simple.retry.enabled = true
#重试的最大次数
spring.rabbitmq.listener.simple.retry.max-attempts = 6
#重试间隔时间
spring.rabbitmq.listener.simple.retry.initial-interval = 3000
#重试间隔倍数,默认值是1
spring.rabbitmq.listener.simple.retry.multiplier = 2
#最大间隔时间,默认值是10s
spring.rabbitmq.listener.simple.retry.max-interval = 15000

 四、SimpleMessageListenerContainer和DirectMessageListenerContainer区别

SimpleMessageListenerContainer和DirectMessageListenerContainer都是Spring AMQP提供的消息监听容器,它们之间的区别在于:

  1. SimpleMessageListenerContainer是基于AMQP协议的,而DirectMessageListenerContainer是基于RabbitMQ的,因此SimpleMessageListenerContainer可以用于其他的AMQP实现,而DirectMessageListenerContainer只能用于RabbitMQ。

  2. SimpleMessageListenerContainer支持订阅多个队列,可以使用通配符等方式进行配置,而DirectMessageListenerContainer只能订阅一个队列。

  3. SimpleMessageListenerContainer支持自动声明队列和绑定,而DirectMessageListenerContainer需要手动声明和绑定队列。

  4. SimpleMessageListenerContainer支持多线程处理消息,而DirectMessageListenerContainer只能单线程处理消息。

因此,如果需要监听多个队列或者使用其他的AMQP实现,可以选择SimpleMessageListenerContainer;如果只需要监听一个队列并且使用RabbitMQ,可以选择DirectMessageListenerContainer。

http://www.dt0577.cn/news/50878.html

相关文章:

  • 网站公司 转型全国各城市疫情高峰感染进度
  • 焦作做网站企业邮箱登录入口
  • 网站做好怎么开始做推广seo网站优化案例
  • 做微视频的网站济南网站建设老威
  • 做网站要学的知识推广app的单子都在哪里接的
  • 做网站多少钱西宁君博正规免费加客源软件
  • 宁波网站建设网站收录量是什么意思
  • 提供网站建设的公司今日新闻10条简短
  • 遵义市人民政府门户网站搜索引擎营销的优缺点
  • 做网站优化的注意事项新闻头条最新消息今天发布
  • 网站设计与网页制作教程泉州关键词搜索排名
  • flash asp设计公司网站源码上海网站建设方案
  • 辽 icp 大连 网站建设湖北短视频seo营销
  • 无锡市做企业网站的腾讯企业邮箱登录入口
  • 做网站费用上海网站排名优化制作
  • 网站如何推广方案策划网站优化 推广
  • flash静态网站南宁seo内部优化
  • 丹阳如何做百度的网站新闻稿撰写
  • 网站宣传页旺道seo营销软件
  • 河南网站建设价格百度指数需求图谱
  • 制作网站费用怎么做分录在线seo
  • 想要给网站加视频怎么做市场调研方法有哪些
  • 网站设计软件有哪些seo关键词优化举例
  • 投资理财网站开发外包公司是什么意思
  • 网站建设优化推广杭州如何让自己的网站被百度收录
  • 做婚庆网站有哪些内容搜索引擎广告投放
  • 属于b2b电子商务网站的是新闻发布
  • 临沂建设企业网站优化游戏性能的软件
  • 电影网站app怎么做东莞疫情最新消息今天中高风险区
  • dedecms wap网站模板下载网站规划