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

北京建设网站 公司下载wordpress 4.8.1

北京建设网站 公司,下载wordpress 4.8.1,怎样做 云知梦 网站 付费网站,平陆县做网站在集成RabbitMQ与Spring Boot 3.1.x时#xff0c;RetryOperationsInterceptor 是实现消息重试机制的关键组件。这里将深入分析 RetryOperationsInterceptor 的工作原理#xff0c;尤其是在消费者消费失败时的行为#xff0c;并结合底层源码进行详解。 一、配置解析 首先RetryOperationsInterceptor 是实现消息重试机制的关键组件。这里将深入分析 RetryOperationsInterceptor 的工作原理尤其是在消费者消费失败时的行为并结合底层源码进行详解。 一、配置解析 首先需要提供 RetryOperationsInterceptor 配置如下 // 配置重试拦截器 RetryOperationsInterceptor retryInterceptor RetryInterceptorBuilder.stateless().maxAttempts(3) // 初次消费 2次重试.backOffOptions(1000, 2.0, 10000) // 初始间隔1秒倍增因子2.0最大间隔10秒.recoverer(new RepublishMessageRecoverer(rabbitTemplate,DEAD_LETTER_EXCHANGE,DEAD_LETTER_ROUTING_KEY)).build();这段配置的含义如下 maxAttempts(3): 设置最大尝试次数为3次包括初次消费和2次重试。backOffOptions(1000, 2.0, 10000): 设置重试的间隔策略初始间隔为1秒倍增因子为2.0最大间隔为10秒。recoverer: 当所有重试尝试失败后使用 RepublishMessageRecoverer 将消息转发到指定的死信交换机和路由键。 二、RetryOperationsInterceptor 的工作原理 RetryOperationsInterceptor 是Spring Retry提供的拦截器用于在方法执行失败时自动进行重试。结合Spring AMQPRabbitMQ的消息监听器容器它能够在消息处理失败时执行重试逻辑。 1. 消息消费流程 当RabbitMQ消费者接收到消息时以下步骤会依次执行 消息接收: 消息被送到监听方法 onMessage。消息处理: 执行 processMessage(message) 方法进行业务处理。成功确认: 如果处理成功消息被确认ACK。处理失败: 如果抛出异常触发重试机制。 2. 重试拦截器的作用 当 processMessage 方法抛出异常时RetryOperationsInterceptor 会拦截这个异常并按照配置的重试策略进行重试。具体流程如下 拦截异常: 异常被 RetryOperationsInterceptor 捕获。执行重试: 根据 backOffOptions 设置的间隔和倍增因子等待指定时间后重新执行 onMessage 方法。重试次数限制: 如果重试次数未超过 maxAttempts则继续重试否则执行 recoverer 逻辑。 3. 重试逻辑的底层实现 从源码角度看RetryOperationsInterceptor 主要依赖于 RetryTemplate 来执行重试逻辑。以下是关键步骤 构建 RetryTemplate: RetryTemplate retryTemplate new RetryTemplate(); SimpleRetryPolicy retryPolicy new SimpleRetryPolicy(); retryPolicy.setMaxAttempts(3); retryTemplate.setRetryPolicy(retryPolicy);ExponentialBackOffPolicy backOffPolicy new ExponentialBackOffPolicy(); backOffPolicy.setInitialInterval(1000); backOffPolicy.setMultiplier(2.0); backOffPolicy.setMaxInterval(10000); retryTemplate.setBackOffPolicy(backOffPolicy);执行重试: retryTemplate.execute(context - {// 调用实际的消息处理方法onMessage(message);return null; }, context - {// 重试失败后的回调recoverer.recover(message, context.getLastThrowable());return null; });异常处理与恢复: 每次重试失败时RetryTemplate 会根据 BackOffPolicy 计算下次重试的等待时间。如果所有重试次数都失败则调用 RepublishMessageRecoverer 将消息发送到死信队列。 三、与 RabbitListener 的集成 在您的消费者代码中 RabbitListener(queues RabbitConfig.MAIN_QUEUE, containerFactory rabbitListenerContainerFactory) public void onMessage(String message) throws Exception {LOGGER.info(接收到消息: {}, message);// 处理消息processMessage(message);LOGGER.info(消息处理成功并确认: {}, message); }这里的关键在于 containerFactory 的配置确保 RetryOperationsInterceptor 被正确应用到消息监听器容器中。 1. rabbitListenerContainerFactory 配置示例 Bean public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory,RabbitTemplate rabbitTemplate) {SimpleRabbitListenerContainerFactory factory new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setAcknowledgeMode(AcknowledgeMode.AUTO);factory.setAdviceChain(retryInterceptor(rabbitTemplate));return factory; }Bean public RetryOperationsInterceptor retryInterceptor(RabbitTemplate rabbitTemplate) {return RetryInterceptorBuilder.stateless().maxAttempts(3).backOffOptions(1000, 2.0, 10000).recoverer(new RepublishMessageRecoverer(rabbitTemplate,DEAD_LETTER_EXCHANGE,DEAD_LETTER_ROUTING_KEY)).build(); }在这里RetryOperationsInterceptor 被添加到监听器容器的 adviceChain 中使其能够拦截 onMessage 方法的执行。 四、底层源码分析 让我们更深入地看看Spring AMQP和Spring Retry的集成是如何实现的。 1. Spring AMQP 消息监听器容器 SimpleRabbitListenerContainerFactory 创建的 SimpleMessageListenerContainer 是实际的消息监听器容器。该容器负责从RabbitMQ获取消息并调用相应的监听方法。 2. RetryOperationsInterceptor 的集成 在 SimpleMessageListenerContainer 中adviceChain 被应用到消息处理逻辑中。具体来说RabbitListenerEndpointContainer#invokeListener 方法会被 RetryOperationsInterceptor 包裹确保在调用监听方法时执行重试逻辑。 3. RetryTemplate 的执行流程 RetryOperationsInterceptor 内部使用 RetryTemplate 来管理重试流程。其核心逻辑如下 public Object invoke(MethodInvocation invocation) throws Throwable {return retryTemplate.execute(context - {try {return invocation.proceed();} catch (Exception e) {throw e;}}, context - {// 重试失败后的恢复逻辑recoverer.recover(message, context.getLastThrowable());return null;}); }在每次重试中RetryTemplate 会调用 invocation.proceed() 执行实际的消息处理。如果抛出异常则根据 RetryPolicy 决定是否继续重试。 4. RepublishMessageRecoverer 的作用 当所有重试尝试失败后RepublishMessageRecoverer 会将消息重新发布到指定的死信交换机和路由键。这是通过以下方式实现的 public void recover(Message message, Throwable cause) {MessageProperties properties message.getMessageProperties();properties.setHeader(x-exception-stacktrace, getStackTrace(cause));rabbitTemplate.send(deadLetterExchange, deadLetterRoutingKey, message); }这样未成功处理的消息不会丢失而是被转发到死信队列便于后续分析和处理。 五、总结 RetryOperationsInterceptor 在Spring Boot与RabbitMQ集成中通过拦截消息处理方法的异常按照配置的重试策略自动执行重试逻辑极大地提高了系统的可靠性和健壮性。其底层依赖于Spring Retry的 RetryTemplate 和 BackOffPolicy并通过 RepublishMessageRecoverer 实现失败后的消息转发。 通过理解上述工作原理和源码实现可以更灵活地配置和优化消息重试机制确保消息处理的稳定性和可控性。
http://www.tj-hxxt.cn/news/228558.html

相关文章:

  • 不会代码 怎么做网站wordpress网站打开速度慢
  • 企业营销型网站有哪些如何开公司做网站
  • 做导购网站如何获利雁塔区住房和城乡建设局网站
  • 做网站 零基础从哪里开始学广东海外建设监理有限公司官方网站
  • 在阿里云做的网站怎么进后台济南住宅网签查询
  • 无锡市规划建设局网站网站如何优化排名软件
  • 北京市住房城乡建设部网站网站地图的使用
  • 设计漂亮的网站做系统正版win10系统下载网站
  • 网站如何添加内容武威市凉州区建设局网站
  • 济南商务网站建设网站开发命名规范
  • 自己做网站视频教学搭建网站怎么赚钱
  • 深圳企业网站制作公司怎样网站开发毕业设计开课题目
  • 最好的产品网站建设做携程网站的技术
  • 建设展示型网站公司哪家好社交网站怎么制作
  • 呼叫中心网站建设深圳市建
  • 绍兴专业制作网站榆林建站网站建设
  • 上传网站主办者承诺书建网站哪家好 优帮云
  • 工伤保险网上做实网站网站建设报价明细
  • 两个人能用的一个公司做网站吗软件工程就业方向及薪资待遇
  • 西安做网站的公司有网站建设公司株洲
  • 网页的建设流程怎么确定搜索引擎seo推广
  • 自治区建设厅网站html5单页面网站
  • 微信网站开发用什么语言wordpress 内涵段子
  • 贵州省交通工程建设质监局网站网店运营论文3000字
  • 定制手机号码官方网站做网站网站如何定位
  • 惠州建设银行网站梧州seo排名
  • 手机怎么搭建网站源码网游开发
  • 网站性能容量的收集与分析怎么做图片生成器在线
  • 苏州做网站设计手机网站设计趋势
  • 吴江设计网站公司2024免费网站推广大全