Верблюжий маршрут - игнорировать возвращаемое значение

1

У меня есть следующий маршрут:

    from("INPUT_QUEUE")
        .routeId("Test")
        .beanRef("logService", "save")
        .beanRef("deserialiser", "deserialise")

Метод "save" в LogService возвращает целое число. Я не хочу, чтобы это целое число передавалось методу десериализации. Мне нужен json, исходящий из входной очереди для передачи.

Любая помощь приветствуется и извиняется за простой вопрос, поскольку я новичок в верблюде.

  • 0
    Можете ли вы также показать реализацию вашего метода сохранения?
Теги:
spring
java-ee
apache-camel

3 ответа

4
Лучший ответ

Используйте шаблон многоадресной рассылки, который позволяет маршрутизировать одно и то же сообщение на несколько конечных точек и обрабатывать их по-другому:

from("INPUT_QUEUE")
    .routeId("Test")
    .multicast()
        .beanRef("logService", "save")
        .beanRef("deserialiser", "deserialise")
    .end();
  • 0
    Спасибо, только что проверил и отлично работает.
2

Компонент bean не будет использовать возвращаемое значение метода в качестве нового тела сообщения.

Однако вы можете использовать компонент языка и настроить его на не преобразование, что-то вроде

.to("language:bean:logService.save?transform=false")

Я не могу вспомнить точный синтаксис, но я думаю, вы можете использовать точку для разделения имени метода для вызова, как показано выше

0

Вы можете определить свой save(), чтобы иметь такой аргумент, как обмен Exchange

 save(yourExistingArguments, Exchange exchange){
     //performYourOperations and get your integer

     //However, do not set the integer in the exchange body.

     // exchange.getIn().setBody(integer)

     // Do not return the integer. Set the integer as state and make it accessible through getter and setter

Вот и все. Ваше сообщение передается, так как оно не имеет целого числа

  • 0
    Я думаю, что по сути вы говорите, что метод save должен возвращать void. Это, очевидно, сработает - я хотел узнать, есть ли способ, не меняя сигнатуру метода save.
  • 0
    почему вы не создаете метод-обертку, который вызывает этот ваш метод и принимает возвращаемое значение, но все равно возвращает пустоту?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню