【问题标题】:Send message to a JMS queue using Spring Boot使用 Spring Boot 向 JMS 队列发送消息
【发布时间】:2020-06-18 17:04:05
【问题描述】:

我是 Spring JMS 的新手。我的应用程序是使用 Spring Boot 开发的,并部署在 JBoss EAP 7.2.0 中。我有一个远程队列,它是一个 Active MQ Artemis 队列,它也嵌入在 JBoss EAP 7.2.0 中。谁能建议我如何使用 Spring Boot 的 JmsTemplate 向远程 JMS 队列发送消息?基本上我不知道我应该如何定义远程连接工厂来连接到远程队列。

【问题讨论】:

  • 您是在使用 JNDI 还是以编程方式实例化 ConnectionFactoryDestination
  • 是的,我正在使用 JNDI 来配置 ConnectionFactory 和 Destination

标签: spring-boot jms spring-jms activemq-artemis jboss-eap-7


【解决方案1】:
  1. 将以下内容添加到应用程序属性中,因为您的应用程序部署在应用程序服务器中
  spring.jms.jndi-name=java:/<your connection factory name for artemis>
  1. 添加artemis依赖,让spring boot自动配置jmsTemplate
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-artemis</artifactId>
   </dependency>
  1. 自动装配 jmsTemplate 并发送消息
@Component
public class MyMessageSender {

        @Autowired
        JmsTemplate jmsTemplate;


        public void send(String msg){
                jmsTemplate.convertAndSend("my.queue.name", msg);
        }
}
  1. 您可以选择配置消息转换器并将 pojos 作为消息发送,并让 spring 负责将其转换为 json。例如
    @Bean // Serialize message content to json using TextMessage
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        return converter;
    }

【讨论】:

  • 我的队列位于远程服务器上,那么我将在哪里提供 INITIAL_CONTEXT_FACTORY、PROVIDER_URL、SECURITY_PRINCIPAL 和 SECURITY_CREDENTIAL?
  • developers.redhat.com/quickstarts/eap/helloworld-jms/…,在这个示例源代码中,首先创建了一个Connectionfactory。所以你可以提取那部分并定义一个@Bean public ConnectionFactory connectionFactory(){...}(这是JndiConnectionFactoryAutoConfiguration创建的bean之一,它不会像你配置的那样)
猜你喜欢
  • 2020-04-05
  • 2015-07-08
  • 2015-08-25
  • 2013-05-22
  • 2015-12-03
  • 2016-05-02
  • 2015-02-19
  • 2017-12-06
  • 1970-01-01
相关资源
最近更新 更多