消息转换
消息转换
有时在 JMS 提供者内部转换消息非常有用。例如,您可能有一个已经运行了一段时间的应用程序,它使用 ObjectMessage 消息,但您希望将其转换为使用 XML 负载(以保护自己免受序列化问题的影响)。
因此,从 4.2 版本开始,ActiveMQ Classic 提供了一个可插拔的策略,称为 MessageTransformer 接口。这允许您
- 在消息发送到 JMS 提供者内的消息总线之前,丰富或转换消息
- 在消息从消息总线接收但尚未分派到消费者之前,丰富或转换消息
因此,这允许您使用某种 XML 编组技术(如 XStream 或 JAXB2)将 ObjectMessage 转换为包含 XML 的 TextMessage。
例如,存在 XStreamMessageTransformer,当它在 ConnectionFactory 上配置时,将导致所有 ObjectMessage 实例在网络上自动转换到 TextMessage 实例,反之亦然。如果您有非 Java 客户端希望与您的 Java 消息进行通信,这将非常有用。
使用 MessageTransformer
要使用 MessageTransformer,您可以通过 setTransformer() 方法将其安装在以下类之一上
- ActiveMQConnectionFactory
- ActiveMQConnection
- ActiveMQSession
- ActiveMQMessageConsumer
- ActiveMQMessageProducer
转换器会继承到子对象上;因此,您可以在连接工厂上安装特定的转换器,它将继承到所有连接、会话、生产者、消费者上