使用@RabbitListener注解消费消息

简介: 使用@RabbitListener注解消费消息

1 注解的字段

@RabbitListener注解指定目标方法作为消费消息的方法,通过注解参数指定所监听的队列或者Binding。

1.1 containerFactory

使用@RabbitListenercontainerFactory可设置一个自己明确默认值的RabbitListenerContainerFactory对象。

RabbitListenerContainerFactory的bean名称用以创建负责服务于这个端点的消息监听器容器。

如果没有指定,使用默认的容器工厂。如果指定了,则返回其工厂bean名称。image.png

  • 可以在配置文件中设置RabbitListenerAnnotationBeanPostProcessor并通过设置@RabbitListener的执行
  • 也可以通过@EnableRabbit注解来启用@RabbitListener
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConsumerConfig {
    @Bean
    public ConnectionFactory connectionFactory(){
        CachingConnectionFactory factory = new CachingConnectionFactory();
        factory.setUri("amqp://zhihao.miao:123456@192.168.1.131:5672");
        return factory;
    }
    @Bean
    public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){
        //SimpleRabbitListenerContainerFactory发现消息中有content_type有text就会默认将其转换成string类型的
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
}

定义消息处理器,@RabbitListener注解标记的方法

@Component
public class MessageHandler {
    @RabbitListener(queues = "zhihao.miao.order")
    public void handleMessage(byte[] message){
        System.out.println("消费消息");
        System.out.println(new String(message));
    }
}

应用启动类,@EnableRabbit启用@RabbitListener

@EnableRabbit
@ComponentScan
public class Application {
    public static void main(String[] args) throws Exception{
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        System.out.println("rabbit service startup");
        TimeUnit.SECONDS.sleep(60);
        context.close();
    }
}
目录
相关文章
|
10月前
|
消息中间件 NoSQL Redis
消息重复消费的问题
消息重复消费的问题
|
9月前
|
消息中间件 存储 安全
RocketMQ-消息消费模式 顺序消费
RocketMQ-消息消费模式 顺序消费
162 0
|
10月前
|
Dubbo Java 应用服务中间件
<2>Dubbo中使用服务消费者调用生产者
接上一篇博客Dubbo快速入门 发布服务、启动服务
|
12月前
|
消息中间件 Docker 容器
【消息中间件】异常和死信消息们的浪浪山 3
【消息中间件】异常和死信消息们的浪浪山
|
12月前
|
消息中间件 Java Spring
【消息中间件】异常和死信消息们的浪浪山 1
【消息中间件】异常和死信消息们的浪浪山
|
12月前
|
消息中间件 Java 测试技术
【消息中间件】异常和死信消息们的浪浪山 2
【消息中间件】异常和死信消息们的浪浪山
|
XML JSON 负载均衡
消费者访问生产者的三种远程调用方式
1.FeignClient接口,不能使用@GettingMapping之类的组合注解 2.FeignClient接口中,如果使用到@PathVariable必须指定其value 3.只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求,同时生产者必须支持POST请求并给参数添加@RequestBody注解 建议使用公共vo+@RequestBody方式 4.springcloud中feign访问其他服务并传参数出现错误的问题:status 405 reading LogisticsOrderService#get
|
消息中间件 RocketMQ 开发者
消息消费初探|学习笔记
快速学习消息消费初探
63 0
消息消费初探|学习笔记
|
存储 消息中间件 负载均衡
消息消费启动流程|学习笔记
快速学习消息消费启动流程
73 0
消息消费启动流程|学习笔记
|
消息中间件 负载均衡 Java
消息消费基本流程|学习笔记
快速学习消息消费基本流程
71 0