消费消息
在spring容器中可构建SimpleMessageListenerContainer来消费消息,也可用@RabbitListener来消费消息。
在spring容器中托管一个RabbitListenerContainerFactory的bean(默认的实现是org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory)
@RabbitListener
- @RabbitListener注解指定目标方法来作为消费消息的方法
@RabbitListener 可以监听多个队列
@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”),
exchange =@Exchange(value = "exchange",durable = "true"),key = "welcome")})
<a name="ySFS4"></a>
### @Payload和@Headers
```java
@Component
public class MessageHandler {
//获取消息的头属性和body属性
@RabbitListener(queues = "zhihao.miao.order")
public void handleMessage(@Payload String body, @Headers Map<String,Object> headers){
System.out.println("====消费消息===handleMessage");
System.out.println(headers);
System.out.println(body);
}
}
获取单一个Header的属性,Header还有其他的一些属性,比如required,defaultvalue等属性