Установка свойства обмена Camel из процессора - PullRequest
0 голосов
/ 04 марта 2019

Java 8 и Camel 2.19.x здесь.У меня есть следующий маршрут Camel:

<route id="widgetProcessing">
  <from uri="activemq:inputQueue"/>
  <to uri="{{widgetFetcher}}"/>
</route>

И процессор widgetFetcher:

@Component("widgetFetcher")
public class WidgetFetcher {
  private WidgetDao widgetDao;

  public WidgetFetcher(WidgetDao widgetDao) {
    this.widgetDao = widgetDao;
  }

  public Widget getWidgetToProcess() {
    // get the next widget id from the database
    final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();

    // Do lots of stuff with 'firstWidgetId' down here...
  }
}

Я хотел бы создать свойство exchange после <from> и до WidgetFetcher и установите начальное значение этого свойства на null;а затем условно устанавливает его значение на что-то еще внутри WidgetFetcher.Кроме того, я бы хотел, чтобы это переназначенное значение «прилипало» к оставшейся части маршрута / обработки.Так что-то вроде:

<route id="widgetProcessing">
  <from uri="activemq:inputQueue"/>

  <setProperty propertyName="fizzId">
    <constant>null</constant>
  </setProperty>

  <to uri="{{widgetFetcher}}"/>

  <log message="fizzId = ${property[fizzId]}" loggingLevel="ERROR"/>
</route>

А потом:

public Widget getWidgetToProcess(@ExchangeProperty("fizzId") final String fizzId) {
  // get the next widget id from the database
  final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();

  if (someMethodReturnsTrue()) {
    // Does this actually get saved outside the 
    log.info("About to update fizzId...")
    fizzId = UUID.randomUUID().toString();
  }

  // Do lots of stuff with 'firstWidgetId' down here...
}

Однако во время выполнения локальное назначение fizzId = ..., похоже, не принимает, так как вывод журнала показывает:

About to update fizzId...
fizzId = null

Так что я думаю, что мой процессор получает копию свойства fizzId exchange, но повторное присвоение его значения inline фактически не изменяет фактическое значение для остальной части маршрута. Есть идеи, как это сделать?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Вместо того, чтобы передавать свойство процессору, примите Exchange - тогда вы можете установить свойство на обмен.

0 голосов
/ 05 марта 2019

Вам, вероятно, нужна ссылка на что-то более высокое, чтобы установить значение.Попробуйте использовать аннотацию для полной карты свойств @Properties или попросите, чтобы ваш WidgetFetcher реализовал Processor, чтобы получить ссылку на полный обмен.

ref: Верблюжные аннотации

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