
@RabbitListener注解指定目标方法作为消费消息的方法,通过注解参数指定所监听的队列或者Binding。
使用@RabbitListener的containerFactory可设置一个自己明确默认值的RabbitListenerContainerFactory对象。
RabbitListenerContainerFactory的bean名称用以创建负责服务于这个端点的消息监听器容器。
如果没有指定,使用默认的容器工厂。如果指定了,则返回其工厂bean名称。

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();
}
}如果发送的消息content_type的属性是text,那么接收的消息处理方法的参数就必须是String类型,如果是byte[]类型就会报错。
指定content_type类型为text
参考