ProducerTemplate не был запущен - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь отправить сообщение от боба на маршрут в моем контексте верблюда. Как мне сделать это правильно и как повторно использовать шаблон 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 продолжают появляться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...