您当前的位置: 首页 > 

使用@RabbitListener注解消费消息

发布时间:2021-02-02 12:56:27 ,浏览量:0

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(); } } 

如果发送的消息content_type的属性是text,那么接收的消息处理方法的参数就必须是String类型,如果是byte[]类型就会报错。

指定content_type类型为text

参考

  • https://blog.csdn.net/u012129558/article/details/85099861
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0545s