Spring Boot 如何在Sping Boot 消息中添加MessageConverter

6vl6ewon  于 2022-11-05  发布在  Spring
关注(0)|答案(2)|浏览(164)

如何使用Sping Boot 为目标定义MessageConverter?我已经定义了消息代理和JMS侦听器。

@JmsListener(destination = "new.clinic.queue")
public void receiveNewClinic(MyCustomDTO message) {

}

和我的消息代理

@Bean
public BrokerService broker() throws Exception {
    BrokerService broker = new BrokerService();
    broker.setBrokerName(brokerName);
    broker.addConnector(brokerAddress);
    return broker;
}

如何为MyCustomDTO添加自己消息转换器

bweufnob

bweufnob1#

您需要创建一个JmsMessageContainerFactory并对其进行相应的配置。Sping Boot 会为您创建一个示例,但您可以根据需要使用自己的自定义创建任意多的示例,并使用@JmsListener注解的containerFactory引用它们。

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
        ConnectionFactory connectionFactory) {
  DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
  factory.setConnectionFactory(connectionFactory);
  factory.setMessageConverter(yourMessageConverter());
  // .. other settings
  return factory;
}

请注意,此处的bean名称是默认名称,因此您不需要指定connectionFactory属性。
Sping Boot 1.4将auto-detect your MessageConverter并将其分配给它自动为您创建的默认工厂。

xtfmy6hx

xtfmy6hx2#

您可以像这样定义转换器

@Component
public MyConverter implements MessageConverter {
    @Override
    ...toMessage(...)

    @Override
    ...fromMessage(...)

因为您使用@Component对其进行了注解,所以不需要定义JmsTemplate(在其上设置转换器以进行发送)或定义DefaultJmsListenerContainerFactory。
但是要认识到,如果您定义了这两个类,则必须按照Stephane的建议将转换器设置到这两个类上

相关问题