ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
当Rabbit基础结构存在时,可以使用`@RabbitListener`对任何bean进行注释以创建侦听器端点。 如果未定义`RabbitListenerContainerFactory`,则会自动配置默认的`SimpleRabbitListenerContainerFactory`,您可以使用`spring.rabbitmq.listener.type`属性切换到直接容器。 如果定义了`MessageConverter`或`MessageRecoverer` bean,它将自动与默认工厂关联。 以下示例组件在someQueue队列上创建一个侦听器端点: ~~~ @Component public class MyBean { @RabbitListener(queues = "someQueue") public void processMessage(String content) { // ... } } ~~~ 如果需要创建更多`RabbitListenerContainerFactory`实例,或者如果要覆盖缺省值,Spring Boot提供了一个`SimpleRabbitListenerContainerFactoryConfigurer`和一个`DirectRabbitListenerContainerFactoryConfigurer`,您可以使用它来初始化`SimpleRabbitListenerContainerFactory`和`DirectRabbitListenerContainerFactory`,其设置与自动配置使用的工厂相同。 >您选择的容器类型无关紧要。 这两个bean通过自动配置公开。 > 例如,以下配置类公开了另一个使用特定`MessageConverter`的工厂: ~~~ @Configuration static class RabbitConfiguration { @Bean public SimpleRabbitListenerContainerFactory myFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); factory.setMessageConverter(myMessageConverter()); return factory; } } ~~~ 然后,您可以在任何`@ RabbitListener`-annotated方法中使用工厂,如下所示: ~~~ @Component public class MyBean { @RabbitListener(queues = "someQueue", containerFactory="myFactory") public void processMessage(String content) { // ... } } ~~~ 您可以启用重试来处理侦听器抛出异常的情况。 默认情况下,使用`RejectAndDontRequeueRecoverer`,但您可以定义自己的`MessageRecoverer`。 当重试耗尽时,如果代理配置了这样做,则拒绝该消息并将其丢弃或路由到死信交换。 默认情况下,禁用重试。 >默认情况下,如果禁用重试并且侦听器抛出异常,则会无限期地重试传递。 您可以通过两种方式修改此行为:将`defaultRequeueRejected`属性设置为false,以便尝试零重新传递或抛出`AmqpRejectAndDontRequeueException`以指示应拒绝该消息。 后者是启用重试并且达到最大传递尝试次数时使用的机制。