2017-04-14 4 views
1

Ich versuche, einen JMS-Consumer mit activeMq Broker, die eine "transaktionale" Bestätigung haben. Ich möchte Spring-Boot-Anwendung verwenden.ActiveMq Transaktion auf @ JmsListener

Ich lese, dass ich JTA-Transaktion brauche, aber ich weiß nicht, wie ich einen starten kann.

Meine Hauptklasse:

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

Mein Verbraucher:

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

Meine pom.xml Abhängigkeit:

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

Was ich zu tun habe?

Antwort

1

Update Ihr Verbraucher:

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

fügen Sie diese Bohnen:

@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; 
} 
+0

Es funktioniert, aber es ist Bypass die Feder Boot-Autokonfiguration – BokC

+0

yep das gleiche einen spezifischen MessageConverter https gerne verwendet: //docs.spring .io/spring-boot/docs/current/referenz/html/boot-features-messaging.html # boot-features-using-jms-empfang –