rabbitmq死信队列 用rabbitmq web控制台创建交换机,队列,绑定关系,演示 消息被拒绝(basic.reject/ basic.nack)并且不再重新投递 requeue=false

news/2023/6/8 7:32:19

先用rabbitmq控制台创建正常的交换机,队列,死信的交换机,队列,绑定关系等,查看以下博文,
只要 以下文章的1-3步,因为这里演示另种情况,消息到死信队列
https://blog.csdn.net/qq_41712271/article/details/115658848?spm=1001.2014.3001.5501

生产者为方便,直接用rabbitmq控制台发送消息

创建一个消费者工程,并手动ack确认,部分api的使用可查看以下博文,
https://blog.csdn.net/qq_41712271/article/details/115630402?spm=1001.2014.3001.5501
改动关键代码  channel.basicNack(deliveryTag, true, false); 
就是最后一个参数 ,并且不再重新投递到原交换机 requeue=false


剩下的改动没啥变化,直接用上面的工程就可以了,为了看起来不乱,还是直接再写下吧

1 消费者工程 application.yml文件

server:port: 8021
spring:#给项目来个名字application:name: rabbitmq-test#配置rabbitMq 服务器rabbitmq:host: 127.0.0.1port: 5672username: needpassword: 123456#虚拟host 可以不设置,使用server默认hostvirtual-host: /testhost#ack 确认方式listener:simple:acknowledge-mode: manualdirect:acknowledge-mode: manual

2 消费者代码

import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.io.IOException;@Component
public class xiaofeizhe_1 {//监听的队列名称@RabbitListener(queues = "zhengchang_queue")public void process(Message message, Channel channel) throws IOException {long deliveryTag = message.getMessageProperties().getDeliveryTag();try {String msgbody = new String(message.getBody());//1.接收转换消息System.out.println("消费者 1 收到消息  : " + msgbody + " 编号: " + deliveryTag);//2. 处理业务逻辑System.out.println("处理业务逻辑...");//模拟出现错误System.out.println(500 / Double.valueOf(msgbody));//3. 手动签收channel.basicAck(deliveryTag, true);} catch (Exception e) {//4.拒绝签收/*第三个参数:requeue:重回队列。如果设置为true,则消息重新回到queue,broker会重新发送该消息给消费端这里要演示发到死信队列,就设置为false*/channel.basicNack(deliveryTag, true, false);//channel.basicReject(deliveryTag,false);}}
}

3 用rabbitmq控制台发送消息来演示,如果发正常的数字,就可以直接消费,但是如果发乱七八糟的文字,做不了运算,就会出错,就会通过 消息被拒绝(basic.reject/ basic.nack)并且不再重新投递 requeue=false,发送到死信队列


https://dhexx.cn/news/show-17452.html

相关文章

深入理解JVM--JVM垃圾回收机制

Java语言出来之前,大家都在拼命的写C或者C的程序,而此时存在一个很大的矛盾,C等语言创建对象要不断的去开辟空间,不用的时候有需要不断的去释放控件,既要写构造函数,又要写析构函数,很多时候都在…

会声会影X6-高级运动等效果的练习实践-与您分享...

视频片说明:我在学习X6的视频教程后,做了针对性练习与实 践,我所用的素材取于网络世界-百度下载,视频中的效果有,高级运动;平移缩放,分屏效果,<运用:关键帧,缩放,旋转,加相框,倒影,输出/进入 的缓行...>!与您分享!有对该模板感兴趣的朋友,可在以下网址下载!! 1.视频样片 …

springboot整合mybatis plus 常见增删改查方法的应用

项目完整图&#xff0c;源码下载地址https://download.csdn.net/download/qq_41712271/16690360 1 pom.xml配置 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope> </…

【转载】EJB3下使用Ehcache实现二级缓存

原文&#xff1a;http://blog.csdn.net/binyao02123202/article/details/7064493 EJB3下使用Ehcache实现二级缓存 分类&#xff1a; EJB EJB3 Java2011-12-1218:06 182人阅读 评论(0) 收藏 举报项目使用的是EAR包 之前ehcache一直都配不上 近期上网找了一下 可爱的老外果然没有…

linux系统编程之信号(七)

今天继续学习信号&#xff0c;主要是学习关于时间和定时器相关的函数的使用&#xff0c;关于这个实际上有很多内容&#xff0c;这里先简要进行说明&#xff0c;等之后再慢慢进行相关深入&#xff0c;也主要是为接下来要做的一个综合linux系统编程的例子做准备&#xff0c;好了&…

Lombok 概述和idea的插件配置

以前的Java项目中&#xff0c;充斥着太多不友好的代码&#xff1a;POJO的getter/setter/toString&#xff1b;异常处理&#xff1b;I/O流的关闭操作等等&#xff0c;这些样板代码既没有技术含量&#xff0c;又影响着代码的美观&#xff0c;Lombok应运而生。 1 添加依赖 <d…

OpenCV 无法启动此程序,因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题...

换了64位的系统&#xff0c;配置好之后运行之前的程序&#xff0c;竟然给我抛出这个错误。应该是我的opencv没有安装对吧。系统报错 无法启动此程序&#xff0c;因为计算机中丢失opencv_core249.dll。请尝试重新安装改程序已解决此问题 那就是缺少opencv_core249.dll动态链接库…

稀疏矩阵

一、稀疏矩阵的定义 对于那些零元素数目远远多于非零元素数目&#xff0c;而且非零元素的分布没有规律的矩阵称为稀疏矩阵&#xff08;sparse&#xff09;。  人们无法给出稀疏矩阵的确切定义&#xff0c;一般都仅仅是凭个人的直觉来理解这个概念&#xff0c;即矩阵中非零元素…

在解决方案中所使用 NuGet 管理软件包依赖

使用程序包恢复功能可以在提交源代码时, 不需要将代码库提交到源代码管理中&#xff0c;大幅减少项目的尺寸。所有NuGet程序包都存储在解决方案的Packages文件夹中。 要启用程序包恢复功能&#xff0c;可右键单击解决方案&#xff08;注意&#xff0c;不是右键单击项目文件&…

Oracle用户密码过期,修改永不过期

修改密码有效过期时间&#xff0c;可以通过以下四步设置&#xff0c;如果再第一步发现本身的密码过期时间为无限期的&#xff0c;那就请各位小伙伴绕过&#xff0c;如果发现不是无期限的&#xff0c;那么必须设置第四步&#xff0c;才会生效。 目录 第一步&#xff1a;查询密码…