首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >使用@RabbitListener注解消费消息

使用@RabbitListener注解消费消息

作者头像
JavaEdge
发布2021-02-23 15:44:16
发布2021-02-23 15:44:16
3K0
举报
文章被收录于专栏:JavaEdgeJavaEdge

1 注解的字段

@RabbitListener注解指定目标方法作为消费消息的方法,通过注解参数指定所监听的队列或者Binding。

1.1 containerFactory

使用@RabbitListenercontainerFactory可设置一个自己明确默认值的RabbitListenerContainerFactory对象。 RabbitListenerContainerFactory的bean名称用以创建负责服务于这个端点的消息监听器容器。 如果没有指定,使用默认的容器工厂。如果指定了,则返回其工厂bean名称。

  • 可以在配置文件中设置RabbitListenerAnnotationBeanPostProcessor并通过设置@RabbitListener的执行
  • 也可以通过@EnableRabbit注解来启用@RabbitListener
代码语言:javascript
复制
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注解标记的方法

代码语言:javascript
复制
@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

代码语言:javascript
复制
@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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 注解的字段
    • 1.1 containerFactory
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档