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