【发布时间】:2016-02-19 11:13:22
【问题描述】:
我尝试解决的 Camel Producer 存在不同的问题,但我陷入了其他问题。
1) 我做的第一个实现是在每次需要与 ActiveMQ 主题进行通信时创建一个生产者模板。这导致内存结果不佳,导致服务器在一段时间后崩溃。
内存问题的解决方案是在每次请求后停止()生产者模板。该修复已纠正内存问题,但会导致一些延迟问题。
2)我在某处读到不必每次都创建生产者模板。所以我决定解决延迟问题并在我的班级中只声明一个生产者模板并将其用于每个请求。它似乎工作正常,没有内存泄漏,修复延迟问题......
但是,当我们发送多个需要很长时间(每个 20 秒)的查询时,看起来我们遇到了超时并且组件崩溃了类似 «javax.jms.IllegalStateException: The会话已关闭»。
有没有办法做多线程?这是使用 InOut 交换模式的原因吗? MAXIMUM_CACHE_POOL_SIZE 是如何工作的?我的实现是否正确?
我已经放了我的组件的代码示例:
public void process(Exchange exchange) throws Exception
{
Message in = exchange.getIn();
if (producerTemplate == null) {
CamelContext camelContext = exchange.getContext();
//camelContext.getProperties().put(Exchange.MAXIMUM_CACHE_POOL_SIZE, "50");
producerTemplate = camelContext.createProducerTemplate();
}
...
result = producerTemplate.sendBody(String.format("activemq:%s", camelContext.resolvePropertyPlaceholders("{{channel1}}")), ExchangePattern.InOut, messageToSend).toString();
...
finalResult = producerTemplate.sendBody(String.format("activemq:%s", camelContext.resolvePropertyPlaceholders("{{channel2}}")), ExchangePattern.InOut, result).toString();
...
in.setBody(finalResult );
}
【问题讨论】:
标签: java apache-camel activemq apache-servicemix