ActiveMQ中如何实现消息的格式化和序列化?

ActiveMQ 中可以通过消息转换插件实现消息的格式化和序列化。主要步骤如下:

  1. 安装消息转换插件,这里以 JSON 和 Protobuf 为例:
  • JSON 格式化插件:activemq-apache-camel
  • Protobuf 序列化插件:activemq-protobuf
    下载插件并放入 ActiveMQ_HOME/lib 目录下。
  1. 配置消息转换插件:
<broker>
  <plugins> 
    <camelBrokerPlugin />      <!-- JSON格式化插件 -->
    <protobufPlugin />        <!-- Protobuf序列化插件 -->
  </plugins>
</broker> 
  1. 发送方设置要转换的目标类型:
// JSON格式化
connectionFactory.setMarshalingPolicy("json");  

// Protobuf 序列化  
connectionFactory.setMarshalingPolicy("protobuf");  
  1. 接收方设置相应的还原策略:
// JSON格式化  
connectionFactory.setDemarshalingPolicy("json"); 

// Protobuf 反序列化
connectionFactory.setDemarshalingPolicy("protobuf");
  1. 发送和接收消息:
MessageProducer producer = session.createProducer(queue);
TextMessage msg = session.createTextMessage("Hello");
producer.send(msg);  // 发送消息

MessageConsumer consumer = session.createConsumer(queue);
TextMessage rcvMsg = (TextMessage) consumer.receive();
String text = rcvMsg.getText(); // 接收消息

发送方在发送消息前,会根据设置的 marshalingPolicy 将 TextMessage 格式化为 JSON 字符串或序列化为 Protobuf 数据流。
接收方会在接收消息后,根据设置的 demarshalingPolicy 将消息数据还原为 TextMessage。