【发布时间】:2014-10-02 18:43:42
【问题描述】:
Ciao,我的基本要求是有一条可以发送消息的路由,并将其放在 JMS 队列中。 Camel 上下文在 JavaEE 6 容器中运行,即 JBoss AS 7.1.1,所以它是 HornetQ for JMS 附带的;我通过引导单例启动上下文,但我不使用camel-cdi。到目前为止,我一直在使用camel-jms 组件,但现在我希望尽可能迁移到camel-sjms,因为没有弹簧。
我的问题是:请问在这种 JavaEE 场景中,为camel-sjms 配置 ConnectionFactory 的正确方法是什么?
使用 camel-jms,我可以将其放入端点 URL,就像 .to("jms:myQueue?connectionFactory=#ConnectionFactory") 一样简单。使用 camel-sjms,在我看来,我需要自己创建 SJMSComponent 的实例,设置 connectionFactory,并在启动之前在骆驼上下文中设置此实例。
我有下面的camel-jms Vs camel-sjms案例的代码,我想知道我是否正确“迁移”了ConnectionFactory的设置。谢谢。
对于
camel-jms,这样做是:
@Singleton
@Startup
public class CamelBootstrap {
private CamelContext camelContext;
private ProducerTemplate producerTemplate;
public CamelContext getCamelContext() {
return camelContext;
}
public ProducerTemplate getProducerTemplate() {
return producerTemplate;
}
@PostConstruct
public void init() throws Exception {
camelContext = new DefaultCamelContext();
camelContext.addRoutes(new MyCamelRoutes());
camelContext.start();
producerTemplate = camelContext.createProducerTemplate();
}
}
没什么特别的,在MyCamelRoutes 中我可以使用:
.to("jms:myQueue?connectionFactory=#ConnectionFactory")
对于
camel-sjms,现在我必须修改引导单例:
@Singleton
@Startup
public class CamelBootstrap {
@Resource(mappedName="java:/ConnectionFactory")
private ConnectionFactory connectionFactory;
private CamelContext camelContext;
private ProducerTemplate producerTemplate;
public CamelContext getCamelContext() {
return camelContext;
}
public ProducerTemplate getProducerTemplate() {
return producerTemplate;
}
@PostConstruct
public void init() throws Exception {
camelContext = new DefaultCamelContext();
SjmsComponent sjms = new SjmsComponent();
sjms.setConnectionFactory(connectionFactory);
camelContext.addComponent("sjms", sjms);
camelContext.addRoutes(new MyCamelRoutes());
camelContext.start();
producerTemplate = camelContext.createProducerTemplate();
}
}
请注意@Resource 对于connectionFactory,这是作为对SjmsComponent 实例的引用传递的,该实例被传递给camelContext。然后在MyCamelRoutes 中,我可以使用 sjms,同时使用以下方法进行路由配置:
.to("sjms:myQueue")
代码似乎在这两种情况下都能正常工作,但据我了解,如果没有正确完成 ConnectionFactory 的配置很容易出现性能问题,因此我更愿意询问我是否为我的 JavaEE 场景正确迁移到
camel-sjms。再次感谢
【问题讨论】:
标签: jms apache-camel