ProducerTemplate尚未启动

时间:2019-07-03 11:25:33

标签: java xml apache-camel

我正在尝试将骆驼上下文中的消息从Bean发送到路由。如何正确执行操作以及如何重用ProducerTemplate?

我尝试将所需的端点注入到我的bean中并从中创建一个ProducerTemplate。我有一种怀疑,它在名为onSubscriptionValueReceived的方法中为我提供了值。在那种方法中,我尝试将值发送到注入的端点。我还尝试在端点上设置block = true,因为我怀疑某个地方存在竞争状况,但这也无济于事。

这是我注入端点的方式:

@EndpointInject(uri="direct:onSubscriptionValue?block=true")
ProducerTemplate producer;

这是我的方法,应该将新值发送到direct:onSub ...:

public void onSubscriptionValue(UaMonitoredItem item, DataValue value) throws Exception {
        producer = context.createProducerTemplate();
        producer.setDefaultEndpointUri("direct:onSubscriptionValue?block=true");
        producer.requestBody(new MutablePair<NodeId, DataValue>(item.getReadValueId().getNodeId(), value));
        producer.stop();
}

我也尝试过:

public void onSubscriptionValue(UaMonitoredItem item, DataValue value) throws Exception {
        producer.requestBody(new MutablePair<NodeId, DataValue>(item.getReadValueId().getNodeId(), value));
}

但是,同样的错误。

这是我的骆驼上下文代码:

<route startupOrder="1">
    <from uri="direct:onSubscriptionValue?block=true"/>  
    <choice>
        <when>
        <simple>${bodyAs(String)} regex ".*LKM27_laufmeter.*"</simple>
        <to uri="direct:LKM27_laufmeter"/>
        </when>
        <when>
        <simple>${bodyAs(String)} regex ".*LKM27_lfm_reset.*"</simple>
        <to uri="direct:LKM27_lfm_reset"/>
        </when>
        <when>
        <simple>${bodyAs(String)} regex ".*LKM27_geschwindigkeit.*"</simple>
        <to uri="direct:LKM27_geschwindigkeit"/>
        </when>
    </choice> 
</route>

如您所见,它只是基于内容的路由器。

我希望这个结构将我从bean内的订阅中获得的所有新值发送到注入的端点。这适用于我从订阅中获得的第一组值,但是对于后续的那些,我总是得到以下WARN消息:

org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: direct://onSubscriptionValue?block=true due to: Cannot auto create component: direct

java.lang.IllegalStateException: ProducerTemplate has not been started

我不了解。它对第一组值进行处理没有问题,但是对于第二组和后续值,它突然抛出这些WARN消息。有趣的是,尽管有WARN消息,但所有消息均到达所需的端点,并且可以毫无问题地进行进一步处理。这些WARN消息不断弹出真是令人讨厌。

0 个答案:

没有答案