消费消息

在spring容器中可构建SimpleMessageListenerContainer来消费消息,也可用@RabbitListener来消费消息。

在spring容器中托管一个RabbitListenerContainerFactory的bean(默认的实现是org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory)

@RabbitListener

  • @RabbitListener注解指定目标方法来作为消费消息的方法
  • @RabbitListener 可以监听多个队列

    1. @RabbitListener(queues = { "queue1", "queue2" })
  • 通过注解参数指定所监听的队列或者Binding。

  • @RabbitListener注解其实是可以注解在类上的,这个注解在类上标志着这个类监听某个队列或某些队列
    • 当使用在类上面的时候,需要配合@RabbitHandler注解一起使用,@RabbitListener标注在类上面表示当有收到消息的时候,就交给带有@RabbitHandler的方法处理,具体找哪个方法处理,需要跟进MessageConverter转换后的java对象。
  • @RabbitListener注解的containerFactory属性可以指定一个RabbitListenerContainerFactory的bean,默认是找名字为rabbitListenerContainerFactory的实例。
  • @RabbitListener注解支持自动声明绑定,声明之后自动监听队列的队列,此时@RabbitListener注解的queue和bindings不能同时指定,否则报错 ```java @RabbitListener(bindings ={@QueueBinding(value = @Queue(value = “q5”,durable = “true”),
    1. exchange =@Exchange(value = "exchange",durable = "true"),key = "welcome")})
  1. <a name="ySFS4"></a>
  2. ### @Payload和@Headers
  3. ```java
  4. @Component
  5. public class MessageHandler {
  6. //获取消息的头属性和body属性
  7. @RabbitListener(queues = "zhihao.miao.order")
  8. public void handleMessage(@Payload String body, @Headers Map<String,Object> headers){
  9. System.out.println("====消费消息===handleMessage");
  10. System.out.println(headers);
  11. System.out.println(body);
  12. }
  13. }

获取单一个Header的属性,Header还有其他的一些属性,比如required,defaultvalue等属性