Я пытаюсь отправить сообщение от боба на маршрут в моем контексте верблюда. Как мне сделать это правильно и как повторно использовать шаблон ProducerTemplate?
Я пытался внедрить желаемую конечную точку в мой bean-компонент и создать из него шаблон ProducerTemplate. У меня есть подписка, которая дает мне значения в методе с именем onSubscriptionValueReceived. В этом методе я пытаюсь отправить значения в мою введенную конечную точку. Я также попытался установить block = true на моей конечной точке, потому что я подозревал где-то состояние гонки, но это тоже не помогло.
Вот как я вводю конечную точку:
@EndpointInject(uri="direct:onSubscriptionValue?block=true")
ProducerTemplate producer;
Это мой метод, который должен отправлять новые значения по прямой: 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>
Как видите, это всего лишь маршрутизатор на основе контента.
Я ожидал, что эта конструкция отправит любые новые значения, полученные из моей подписки внутри моего компонента, в конечную точку, которую я внедрил. Это работает для первого набора значений, которые я получаю из моей подписки, но для последующих я всегда получаю следующие ПРЕДУПРЕЖДАЮЩИЕ сообщения:
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 продолжают появляться.