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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM