java - @JmsListener 上的 ActiveMq 事务

标签 java spring-boot spring-jms

我尝试让带有 activeMq 代理的 Jms 消费者获得“事务性”确认。我想使用 Spring Boot 应用程序。

我读到我需要 JTA 事务,但我不知道如何开始一个事务。

我的主要类(class):

@SpringBootApplication
@EnableJms
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我的消费者:

@Component
public class ReceiveMessage {
    @JmsListener(destination = "${jms.queue.destination}")
    public void receiveMessage(final String msg) throws Exception {
        System.out.println("Received:" + msg);
    }
}

我的 pom.xml 依赖项:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
</dependencies>

我必须做什么?

最佳答案

更新您的消费者:

@Component
public class ReceiveMessage {
    @JmsListener(destination = "${jms.queue.destination}", containerFactory = "jmsListenerContainerFactory")
    public void receiveMessage(final String msg) throws Exception {
        System.out.println("Received:" + msg);
    }
}

添加这些 bean :

@Bean
public JmsListenerContainerFactory<?> jmsListenerContainerFactory(
        ConnectionFactory connectionFactory,
        DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory, connectionFactory);
    factory.setTransactionManager(transactionManager());
    return factory;
}

@Bean
public PlatformTransactionManager transactionManager() {
    JmsTransactionManager transactionManager = new JmsTransactionManager();
    transactionManager.setConnectionFactory(jmsConnectionFactory());
    return transactionManager;
}

@Bean
public QueueConnectionFactory jmsConnectionFactory() {
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:5672");
    return connectionFactory;
}

关于java - @JmsListener 上的 ActiveMq 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43409193/

相关文章:

java - System.currentTimeMillis()方法: returning huge value for execution time then actual execution time

java - Spring:未收到电子邮件消息

node.js - 如何将 React 应用程序部署到 Prod 以及如何管理版本控制

spring - 将 Spring Security 全局方法安全性与 Keycloak 集成

java - libgdx 游戏中的 Google Play 商店错误

java - 线程之间的共享内存未更新

java - Eclipse插件热部署

ibm-mq - Websphere 7 + Websphere MQ 7.X + Spring Integration + JMS - 消息监听器停止从队列读取消息

jms - IBM MQ - 如何使用多个连接名称连接到队列管理器(一个是故障转移)

java - Spring JMSListener - 它应该如何处理空负载?