1 注解的字段
@RabbitListener
注解指定目标方法作为消费消息的方法,通过注解参数指定所监听的队列或者Binding。
1.1 containerFactory
使用@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(); } }