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

广东网站建设咨询电话云南移动和生活下载安装

广东网站建设咨询电话,云南移动和生活下载安装,山东住建局和城乡建设厅官网,深圳哪里有做网站推广的如何将普通队列异常消息路由到死信队列 在RabbitMQ中,我们经常需要处理异常消息,特别是当消息处理失败时。一个常见的用例是将异常消息路由到死信队列,以便稍后重新处理或进一步分析。在本篇博客中,我们将演示如何配置RabbitMQ和…

如何将普通队列异常消息路由到死信队列

在RabbitMQ中,我们经常需要处理异常消息,特别是当消息处理失败时。一个常见的用例是将异常消息路由到死信队列,以便稍后重新处理或进一步分析。在本篇博客中,我们将演示如何配置RabbitMQ和Spring Boot,以便将普通队列中的异常消息自动路由到死信队列。

步骤1:创建Spring Boot项目

首先,创建一个Spring Boot项目并添加以下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.0</version></dependency>
</dependencies>

步骤2:配置RabbitMQ和队列

在`application.yml文件中,配置RabbitMQ连接信息:

spring:#给项目来个名字application:name: rabbitmq-provider#配置rabbitMq 服务器rabbitmq:host: 127.0.0.1port: 5672username: rootpassword: 123456#虚拟host 可以不设置,使用server默认hostvirtual-host: /cdn#确认消息已发送到交换机(Exchange)#确认消息已发送到队列(Queue)publisher-returns: truelistener:simple:acknowledge-mode: autoretry:#enabled:开启失败重试enabled: true#第一次重试的间隔时长initial-interval: 1000ms#最长重试间隔,超过这个间隔将不再重试max-interval: 300000ms#下次重试间隔的倍数,此处是2即下次重试间隔是上次的2倍multiplier: 2max-attempts: 4default-requeue-rejected: false  # 达到重试次数进入死信队列publisher-confirm-type: none

然后,创建一个Spring组件,它将包括配置RabbitMQ队列和消息监听器:

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import cn.hutool.core.util.RandomUtil;@RestController
public class ExceptionToDead {@AutowiredRabbitTemplate rabbitTemplate;@Beanpublic Queue normalQueue() {return QueueBuilder.durable("my-normal-queue").withArgument("x-dead-letter-exchange", "my-dead-letter-exchange").withArgument("x-dead-letter-routing-key", "my-dead-letter-routing-key").build();}@Beanpublic DirectExchange normalExchange() {return new DirectExchange("my-normal-exchange");}@Beanpublic Binding normalBinding(Queue normalQueue, DirectExchange normalExchange) {return BindingBuilder.bind(normalQueue).to(normalExchange).with("my-normal-routing-key");}@Beanpublic DirectExchange deadLetterExchange() {return new DirectExchange("my-dead-letter-exchange");}@Beanpublic Queue deadLetterQueue() {return QueueBuilder.durable("my-dead-letter-queue").build();}@Beanpublic Binding deadLetterBinding(Queue deadLetterQueue, DirectExchange deadLetterExchange) {return BindingBuilder.bind(deadLetterQueue).to(deadLetterExchange).with("my-dead-letter-routing-key");}@RabbitListener(queues = "my-normal-queue")public void receiveFromNormalQueue(Integer message) {System.out.println("正常队列收到消息: " + message);if (message % 2 == 0) {int a = 1 / 0; // 引发异常}}@RabbitListener(queues = "my-dead-letter-queue")public void receiveFromDeadLetterQueue(Integer message) {System.out.println("死信队列收到消息: " + message);}@GetMapping("send")public void send() {int number = RandomUtil.randomInt(0, 100);rabbitTemplate.convertAndSend("my-normal-exchange", "my-normal-routing-key", number);}@GetMapping("b")public void b() {int number = RandomUtil.randomInt(0, 100);rabbitTemplate.convertAndSend("simple-key", number);}
}

在这段代码中,我们创建了一个名为my-normal-queue的队列,它将异常消息路由到my-dead-letter-exchange交换机,然后再路由到my-dead-letter-queue队列。我们还创建了相应的交换机和绑定。

注意: 自动确认的时候 ,达到重试次数之后就会路由到绑定的死信,否则消息会丢失

​ 手动确认的时候,消费时候在需要的位置channel.basicNack(message.getMessageProperties().getDeliveryTag(),false,false); 消息才会路由到死信,否则消息会积压

步骤3:监听异常消息并触发死信路由

在上述代码中,我们使用@RabbitListener注解来监听my-normal-queue队列。当消息处理失败时(在这里,我们模拟了一个条件,如果消息为偶数,则引发异常),它将被路由到死信队列。

步骤4:触发异常消息

最后,我们在/send端点上创建了一个HTTP请求,它将发送一个随机整数到my-normal-queue队列。如果随机整数

http://www.yayakq.cn/news/474052/

相关文章:

  • 怎么做qq网站网站运营与管理的一个目的
  • 上海制作网站的公司新网站建设代理商
  • 做go富集的网站企业网站建设方案及报价
  • 网站友情链接检测网络营销管理系统
  • 旅游网站开发的重要性网站后台建设费用
  • 跟犀牛云一样做网站的徐州网站开发公司
  • 实用网站建设宁波网站推广软件哪家强
  • 网站建设中模如何维护wordpress
  • 网站建设绵阳国家查企业信息查询平台
  • 广州网站优化实战博达网站建设流程
  • 外贸常用网站wordpress 获取下一篇
  • 山东外贸国际网站建设哈尔滨网站建设公司有哪些
  • win2012r2 建设网站wordpress修改插件路径
  • 推广网站的方式郴州网站制作公司地址
  • 免费做试卷的网站推广哪个平台好
  • 模板网站建设服务商陕西省交通建设网站
  • 洛阳恒凯做的网站有哪些网站文件夹没有权限设置
  • 台州做网站seo网站开发人员没有按照设计开发
  • 网站建设 中企动力洛阳分公司上海最繁华的五个区
  • 广州关键词优化外包优势的seo网站优化排名
  • 网站不备案可以上线吗株洲做网站哪家好
  • 如何降低网站相似度行业内做网站的公司排名
  • 建 导航网站好长春市快速建站网站
  • 个人网站备案内容深圳网站订制开发
  • 指数网站企业3合1网站建设
  • 马鞍山哪里做网站云主机上传wordpress
  • 网站开发 会员模块wordpress正在建设中
  • 广州服装 网站建设网络架构师和网络工程师区别
  • 秦皇岛做网站多少钱一个网站多少钱
  • 做网站申请哪类商标天津网站维护