zoukankan      html  css  js  c++  java
  • SpringBoot下Activemq自定义MessageConverter

    在一些场景下我们希望在消息发送到MQ之前或者接受消息前对消息做一些自定义处理,这个时候就需要自定义MessageConverter了

    首先要说明的是,在ActiveMQ中自带的有几个MessageConverter,基本能够帮我们完成普通对象的转换,比如我们发送消息时可以直接发送一个User对象,接受消息时可以直接用User来接受而无需自定义MessageConvert
    自带的Converter的转换方式有时候并不适用我们的业务,这里就不再多说,大家可以自己看源码


     
    自带的几个Converter

    准备工作:

    创建SpringBoot项目, 添加ActiveMQ的Springboot依赖包

        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-activemq</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.activemq</groupId>
                <artifactId>activemq-pool</artifactId>
                 <version>5.7.0</version>
            </dependency>
    
    

    在application.properties中添加配置(配置可按需添加,这里只列出相关的几个)

    #指定ActiveMQ broker的URL,默认自动生成.
    spring.activemq.broker-url=tcp://192.168.135.128:61616
    # 要信任的特定包的逗号分隔列表(当不信任所有包时)
    spring.activemq.packages.trusted=cn.ym.a,cn.ym.b
    #设置信任所有的包(和上面的配置二选一)
    spring.activemq.packages.trust-all=true
    
    

    步骤:1

    配置JmsListenerContainerFactory

     

    步骤:2

    配置消费者

    @Component
    public class AMQLitenner {
    
        @JmsListener(destination ="user_create_queue",containerFactory="queueContainer" )
        public void user_create_queue(User user) {
            System.out.println("user_create_queue 接受到消息:  "+user);
        }
    
    
    

    步骤:3

    定义测试类User

    @Getter
    @Setter
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable{
    
        private Long id;
        private String name;
    
    }
    
    

    步骤4:

    自定义MessageConverter

    public class UserConvert implements MessageConverter {
        /**
         * 发送消息时转换
         */
        @Override
        public Message toMessage(Object o, Session session) throws JMSException, MessageConversionException {
            try {
                ObjectMapper mapper = new ObjectMapper();
                String ret = mapper.writeValueAsString(o);
                return session.createTextMessage(ret);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            return session.createTextMessage("error");
        }
    
        /**
         * 接受消息时转换
         */
        @Override
        public User fromMessage(Message message) throws JMSException, MessageConversionException {
            try {
                TextMessage msg = (TextMessage) message;
                ObjectMapper mapper = new ObjectMapper();
                String text = msg.getText();
                return mapper.readValue(text, User.class);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    

    步骤5:

    创建测试接口

        @GetMapping("/testConvert")
        public void test(){
            ActiveMQQueue destination = new ActiveMQQueue("user_create_queue");
            jmsTemplate.setMessageConverter(new UserConvert());
            jmsTemplate.convertAndSend(destination,new User(1L,"才女无敌"));
    
        }
    
    

    步骤6:

    测试结果

    user_create_queue 接受到消息:  User(id=1, name=才女无敌)



    作者:touch_The_Sky
    链接:https://www.jianshu.com/p/8f6128d5f8bd
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    日本最大的汽车品牌:丰田【仅供自己参考】
    读书笔记1
    读书笔记1
    计算机网络笔记1
    ZY凉凉经
    HK凉凉经
    访问一个网站,发生了什么?
    正向代理VS反向代理
    mac下打开hosts文件
    国际手机区号
  • 原文地址:https://www.cnblogs.com/telwanggs/p/13110932.html
Copyright © 2011-2022 走看看