我有简单的代码,它使用 TCP 连接到代理 URL。当我设置事务管理器时,我的代码毫无例外地完成并且没有消息被消耗但是当我不设置牵引管理器时它工作正常。
以下是代码,我没有得到缺少的内容,或者是否需要在代理主机上进行任何配置。
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.camel.component.jms.JmsConfiguration;
import org.apache.camel.impl.DefaultCamelContext;
import org.springframework.jms.connection.JmsTransactionManager;
public class JmsCamelComponent {
public void getMessage() {
CamelContext context = new DefaultCamelContext();
ActiveMQConnectionFactory jmsConnectionFactory = new ActiveMQConnectionFactory(
"tcp://10.10.3.140:61616?jms.redeliveryPolicy.maximumRedeliveries=10");
JmsTransactionManager jmsTransactionManager = new JmsTransactionManager(jmsConnectionFactory);
JmsConfiguration config = new JmsConfiguration(jmsConnectionFactory);
config.setConnectionFactory(jmsConnectionFactory);
JmsComponent jms = new JmsComponent(config);
jms.setTransactionManager(jmsTransactionManager);
jms.setTransactionTimeout(1000000);
try {
System.out.println("Creating and adding route...");
context.addComponent("jms", jms);
context.addRoutes(new RouteBuilder() {
public void configure() {
System.out.println("Inside configure...");
from("jms:topic:prathamq?clientId=411&durableSubscriptionName=parag").to("file://test2");
System.out.println("after getting message");
}
});
ConsumerTemplate template = context.createConsumerTemplate();
context.start();
System.out.println("Context started...");
Thread.sleep(1000);
System.out.println(" " + template.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("In catch block");
e.printStackTrace();
}
}
public static void main(String[] args) {
(new JmsCamelComponent()).getMessage();
}
}
以下行我设置或取消设置“jms.setTransactionManager(jmsTransactionManager);” 请帮忙。提前感谢,Sohan