首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当queue不存在时,如何配置Spring Amqp @RabbitListener不抛出异常?

要配置Spring Amqp @RabbitListener在queue不存在时不抛出异常,可以通过设置missingQueuesFatal属性为false来实现。

missingQueuesFatal属性是在RabbitListenerContainerFactory中配置的,它控制了当监听的queue不存在时的行为。默认情况下,该属性的值为true,即当queue不存在时,会抛出异常。将其设置为false后,当queue不存在时,@RabbitListener将不会抛出异常。

下面是一个示例配置:

代码语言:java
复制
@Configuration
@EnableRabbit
public class RabbitConfig {

    @Bean
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        factory.setMissingQueuesFatal(false); // 设置missingQueuesFatal为false
        return factory;
    }
}

在上述示例中,通过创建一个SimpleRabbitListenerContainerFactory的bean,并设置missingQueuesFatal属性为false,来配置RabbitListenerContainerFactory。

这样,当使用@RabbitListener注解监听的queue不存在时,将不会抛出异常,而是忽略该queue。

注意:这里的配置是针对Spring AMQP的RabbitListener,如果使用其他的消息中间件或者其他框架,可能需要查阅相应的文档来了解如何配置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

硬卷消息中间件系列(八):RabbitMQ 重试机制详解

RabbitMQ的自动确认 自动确认分四种情况(第一就是正常消费,其他三种为异常情况) 消息成功被消费,没有抛出异常,则自动确认,回复ack。涉及requeue,毕竟已经成功了。...抛出ImmediateAcknowledgeAmqpException异常的时候,则视为成功消费,确认该消息。...抛出AmqpRejectAndDontRequeueException异常的时候,则消息会被拒绝,且requeue = false(该异常会在重试超过限制后抛出抛出其他的异常,消息会被拒绝,且requeue...消息未被确认如下图所示: 重试机制有2种情况 消息是自动确认,如果抛出异常导致多次重试都失败,消息被自动确认,消息就丢失了 消息是手动确认,如果抛出异常导致多次重试都失败,消息没被确认,也无法...RabbitMQ 重试机制的相关配置接收端收到消息后程序抛出异常,那么发送端将得不到消息确认(ACK),此时发送端将会循环的发送消息,最终导致内存溢出。

94320

RabbitMQ 学习笔记3 - Java 使用 RabbitMQ 示例

2.知识 高级消息队列协议 (AMQP) 是面向消息的中间件的平台中立的协议。Spring AMQP 项目将 Spring 的概念应用于 AMQP,形成解决方案的开发。...Spring AMQP 框架 Spring AMQP 项目将核心 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发。它提供了一个“模板”作为发送和接收消息的高级抽象。...更多扩展 4.1 生产者发送的结果回调(确认模式) 发布是异步的——如何检测成功和失败? 发布消息是一种异步机制,默认情况下,"无法路由的消息" 会被 RabbitMQ 丢弃。...AUTO:容器自动确认消息,除非MessageListener抛出异常。 实现手动回执,注入 ackMode 就可以了。...@RabbitListener(queues = QUEUE_NAME, ackMode = "MANUAL") 示例: int i = 0; // 异步 接收消息 @RabbitListener

71810

rabbitmq系列(三)消息幂等性处理

在pom.xml中添加amqp依赖: org.springframework.boot spring-boot-starter-amqp...("接收到的消息为" message); int i = 1 / 0; } } 我们会看到消费者工程控制台一直在刷新报错,消费者配出异常,也就是说消息消费不成功的话,该消息会存放在...rabbitmq的服务端,一直进行重试,直到抛出异常为止。...如果一直抛异常,我们的服务很容易挂掉,那有没有办法控制重试几次不成功就不再重试了呢?答案是有的。我们在消费者application.yml中增加一段配置。...在调用接口的工具类中,如果出现异常我们直接返回null,工具类具体代码就不贴了,如果返回null之后怎么处理呢?我们只需要抛出异常rabbitListener捕获到异常后就会自动重试。

1K10

【云原生进阶之PaaS中间件】第四章RabbitMQ-4.1-原理机制与进阶特性

如果queue不存在,当然Consumer不会得到任何的Message。但是如果queue不存在,那么Producer Publish的Message会被丢弃。...所以,还是为了数据丢失,Consumer和Producer都try to create the queue!反正不管怎么样,这个接口都不会出问题。...有Consumer,这个数据会被立即发送到这个Consumer,这个数据被Consumer正确收到时,这个数据就被从queue中删除。 那么什么是正确收到呢?...2.3 批量消费 实现多个消息批量消费,可配置每次消费几个,不足消费数,等待超时后也继续消费 批量消费配置类 /** *批量消费 */ @Configuration public..._@rabbitlistener 异常处理方式-CSDN博客

20810

Springboot整合Rabbitmq,Direct、Fanout、Topic

直连交换机是一对一,如果配置多台监听绑定到同一个直连交换的同一个队列会轮询的方式对消息进行消费,而且不存在重复消费。...代码测试 pom org.springframework.boot spring-boot-starter-amqp...是否持久化,默认是false,持久化队列:会被存储在磁盘上,消息代理重启仍然存在,暂存队列:当前连接有效 // exclusive:默认也是false,只能被当前创建的连接使用,而且连接关闭后队列即被删除...所以这种情况如果消费端消费逻辑抛出异常,也就是消费端没有处理成功这条消息,那么就相当于丢失了消息。...根据情况确认, 这个不做介绍 手动确认, 这个比较关键,也是我们配置接收消息确认机制,多数选择的模式。

59010

SpringBoot整合RabbitMQ消息队列-学习笔记 原

调用/sendTopicSecond请求,交换机为topicExchange,routingKey为topic.second,匹配到topic....RabbitMQ消息的确认机制     在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,消息的生产者在将消息发送出去之后...如果不进行特殊配置的话,默认情况下发布消息是不会返回任何信息给生产者的,也就是生产者是不知道消息有没有正确到达消息服务器,同理,消息消费者在接收消息后,如果在执行业务逻辑过程出现异常崩溃等情况,会导致消息丢失...=true #确认消息已发送到队列(Queue) spring.rabbitmq.publisher-returns=true 在mq-rabbit-provider项目创建配置类RabbitConfig.java...AcknowledgeMode.AUTO:自动确认 AcknowledgeMode.MANUAL:手动确认 默认情况下是自动确认,如果消费端消费逻辑抛出异常,也就是消费端没有处理成功这条消息,那么就相当于丢失了消息

79560

RabbitMQ消息队列入门及解决常见问题

自己根据业务情况,判断什么时候该ack •auto:自动ack,由spring监测listener代码是否出现异常,没有异常则返回ack;抛出异常则返回nack auto模式类似事务机制,出现异常返回...; } 测试可以发现,消息处理抛异常,消息依然被RabbitMQ删除了。...: auto 在异常位置打断点,再次发送消息,程序卡在断点,可以发现此时消息状态为unack(未确定状态): 抛出异常后,因为Spring会自动返回nack,所以消息恢复至Ready状态,并且没有被...重试达到最大次数后,Spring会返回ack,消息会被丢弃 我们可以利用Spring的retry机制,在消费者出现异常利用本地重试,而不是无限制的requeue到mq队列。...【对于异常消息以及兜底方式,还是建议使用前面失败策略中的的异常处理交换机】 2.1.1 死信交换机是什么 一个队列中的消息满足下列情况之一,可以成为死信(dead letter): 消费者使用basic.reject

1.7K20

【SpringBoot MQ 系列】RabbitListener 消费基本使用姿势介绍

所以实际开发过程中,exchange 和 queue 以及对应的绑定关系已经存在的可能性是很高的,并不需要再代码中额外处理; 在这种场景下,消费数据,可以说非常非常简单了,如下: /** * 队列已经存在...不存在 queue 的 autoDelete 属性为 false ,上面的使用场景还是比较合适了;但是,这个属性为 true ,没有消费者队列就会自动删除了,这个时候再用上面的姿势,可能会得到下面的异常...通常这种场景下,是需要我们来主动创建 Queue,并建立与 Exchange 的绑定关系,下面给出@RabbitListener的推荐使用姿势 /** * 队列不存在,需要创建一个队列,并且与exchange...Exchange 注解,用于声明 exchange, type 指定消息投递策略,我们这里用的 topic 方式 key: 在 topic 方式下,这个就是我们熟知的 routingKey 以上,就是在队列不存在的使用姿势... * * @param data */ @RabbitListener(bindings = @QueueBinding(value = @Queue(value = "topic.n2", durable

4.9K41

消息中间件之Rabbitmq

生产者大量产生数据,消费者无法快速消费,那么需要一个中间层。保存这个数据。...那么消息的管理就会异常地困难。...此交换机有个重要参数:”x-match” ”x-match”为“any”,消息头的任意一个值被匹配就可以满足条件 交换机属性 除交换机类型外,在声明交换机时还可以附带许多其他的属性,其中最重要的几个分别是...:是否持久化,如果持久化,那么重启后将会不存在 exclusive:独享(只被一个连接(connection)使用,而且连接关闭后队列即被删除) autoDelete:自动删除,最后一个消费者退订后即被删除...; import org.springframework.context.annotation.Configuration; /** * Topic交换机的配置类 * 1、配置完成之后,使用到的时候会自动创建

88130

RabbitMQ之Direct(直连)Exchange解读

那么消息的管理 就会异常地困难。 可以使用Topic交换机解决这个问题 使用场景适用场景:消费端出现比较挑剔的消费者,这时候就需要用到direct类型了,路由模式需要使用此交换机。...> org.springframework.boot spring-boot-starter-amqp...: 123456 virtual-host: /RabbitConfig配置类:创建队列及交换机并进行绑定 创建 RabbitConfig类,这是一个配置类@Component@Slf4jpublic...RabbitListener 使用 @RabbitListener 注解标记方法,监听到队列 debug 中有消息则会进行接收并处理 消息处理方法参数是由 MessageConverter 转化,...二进制字节数组存储,使用 byte[]application/x-java-serialized-object:java 对象序列化格式存储,使用 Object、相应类型(反序列化时类型应该同包同名,否者会抛出找不到类异常

422131

7000字详解Spring Boot项目集成RabbitMQ实战以及坑点分析

自动确认 none,rabbitmq 默认消费者正确处理所有请求(设置的默认方式)。 根据请况确认 auto,主要分成以下几种情况: 如果消费者在消费的过程中没有抛出异常,则自动确认。...消费者消费的过程中抛出 AmqpRejectAndDontRequeueException 异常的时候,则消息会被拒绝,且该消息不会重回队列。...抛出 ImmediateAcknowledgeAmqpException 异常,消息会被确认。...如果要保证消息的可靠丢失, prefetch 大于 1 ,可能会出现因为服务宕机引起的数据丢失,故建议将 prefetch=1。...在 2.0 以后的版本中,可以在注解中配置该参数,实例代码如下, @RabbitListener(queues = MQConstants.ORDER_DIRECT_QUEUE, concurrency

1.6K10

RabbitMQ之Fanout(扇形) Exchange解读

:实现ApplicationRunner接口----基本介绍Fanout Exchange交换机:一个Msg发送到扇形交换机X上,则扇形交换机X会将消息分别发送给所有绑定到X上的消息队列。...某个扇形交换机上,有消息发送到该扇形交换机上,交换机会将消息的拷贝分别发送给这所有与之绑定的队列中。...> org.springframework.boot spring-boot-starter-amqp...,监听到队列 debug 中有消息则会进行接收并处理 消息处理方法参数是由 MessageConverter 转化,若使用自定义 MessageConverter 则需要在 RabbitListenerContainerFactory...二进制字节数组存储,使用 byte[]application/x-java-serialized-object:java 对象序列化格式存储,使用 Object、相应类型(反序列化时类型应该同包同名,否者会抛出找不到类异常

33351

RabbitMQ之死信队列解读

这个队列存在死信,RabbitMQ 就会自动地将这个消息重新发布到设置的 DLX 上去,进而被路由到另一个队列,即死信队列。...通过 RejectRequeuConsumer 可以看到无论是使用 Reject 方式还是 Nack 方式, requeue 参数设置为 true ,消息发生了重新投递。... requeue 参数设置为 false ,消息丢失了。...// 消息内容 @RabbitListener 使用 @RabbitListener 注解标记方法,监听到队列 debug 中有消息则会进行接收并处理 消息处理方法参数是由 MessageConverter...二进制字节数组存储,使用 byte[] application/x-java-serialized-object:java 对象序列化格式存储,使用 Object、相应类型(反序列化时类型应该同包同名,否者会抛出找不到类异常

599101

​SpringBoot连接多RabbitMQ源

SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但是只能连接一个RabbitMQ,需要连接多个RabbitMQ,默认的配置就不太适用了,需要单独编写每个连接。...代码如下: 配置 application.properties配置文件需要配置两个连接: server.port=8080 # rabbitmq v2.spring.rabbitmq.host=host...=manual #1.mandatory标志位设置为true, # 如果exchange根据自身类型和消息routingKey无法找到一个合适的queue存储消息, # 那么broker会调用...ack v1.spring.rabbitmq.listener.simple.acknowledge-mode=manual #1.mandatory标志位设置为true, # 如果exchange...根据自身类型和消息routingKey无法找到一个合适的queue存储消息, # 那么broker会调用basic.return方法将消息返还给生产者; #2.mandatory设置为false

2.8K30

详解SpringCloud中RabbitMQ消息队列原理及配置,一篇就够!

* 如果全局配置文件中,配置了rabbitmq相关内容,且工程依赖了starter-amqp,则spring容器自动创建AmqpTemplate对象。...* 因为fanout交换器忽略routing-key的匹配,即使配置type=ExchangeTypes.FANOUT也无效。...消息丢失。consumer全部宕机后,消息不能丢失。------持久化解决 消息不会错误消费。...如果某Consumer在处理消息出现了网络不稳定,服务器异常等现象,那么就不会有消息确认反馈,RabbitMQ会认为这个消息没有正常消费,会将消息重新放入队列中。...RabbitMQ未收到Consumer的确认反馈,会根据配置来决定重试推送消息的次数,重试次数使用完毕,无论是否收到确认反馈,RabbitMQ都会删除消息,避免内存泄漏的可能。

2.9K10
领券