Хобрук: Ваш путь к мастерству в программировании

Как избежать попадания нулевого тела в следующий процессор в несколько шагов

Как я могу ограничить нулевое тело от входа в несколько процессоров в одном общем месте. В приведенном ниже коде вместо проверки нулевого тела на каждом процессоре, как я могу определить его в одном месте?

<choice>
    <when>
        <simple>${body} != null</simple>
        <process ref="processor1" />
        <choice>
            <when>
                <simple>${body} != null</simple>
                <process ref="processor2" />
                <!-- Splitter -->
                <split>
                    <simple>body</simple>
                    <process ref="processor3" />
                </split>
            </when>   
        </choice>
    </when>
</choice>     

  • Если нулевое сообщение не подходит для данного процессора, почему бы не определить его в самом процессоре и игнорировать (повторно отправить) нулевое значение? 31.08.2015
  • Можете ли вы привести пример, как это сделать в процессоре? 31.08.2015

Ответы:


1

Я предлагаю вам полностью оставить корень, тем самым сделав дальнейшие проверки нулевых значений устаревшими. Быстрый и простой способ остановить обработку маршрута для вашего текущего сообщения — установить свойство Exchange.ROUTE_STOP для вашего объекта exchange И вернуть null:

exchange.getProperty(Exchange.ROUTE_STOP, Boolean.TRUE)
31.08.2015
  • Я думаю, вы имели в виду exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE); 02.09.2016

  • 2

    Код в комментарии будет ужасно отображаться, поэтому я отправляю ответ. Выполнение этого в процессоре - это простая проверка нуля, никакой философии.

    public class SomeProcessor implements Processor {
    
        public void process(Exchange exchange) {
            if(exchange.getIn().getBody() != null){
                // Your processing here
                // Is only performed
                // When body is not null
                // Otherwise null body is being resent
            }
        }
    
    }
    

    Редактировать (ответить на комментарий): это невозможно, насколько я знаю, и это было бы неправильным способом сделать это. Маршрутизатор, который вы уже используете, — это то, как это должно выполняться. Если вы хотите выбросить свое сообщение, я думаю, что это может сработать (хотя я не проверял):

    <choice>
        <when>
            <simple>${body} == null</simple>
            #<stop />
            # OR
            #<to uri="wherever-you-want-to-send-nonvalid-messages" />
        </when>
        <otherwise>
            <camel:process ref="processor1" />
            <camel:process ref="processor2" />
            <camel:process ref="processor3" />
            <to uri="where-you-want-to-send-valid-messages" />
        </otherwise>
    
    </choice>
    

    Очевидно, что он будет проверять наличие нулей только перед первым процессором, поэтому, если, например, второй процессор выдает нулевое сообщение, оно не будет выброшено.

    31.08.2015
  • Да, но это следует делать только в том случае, если null не является допустимым внутренним значением для процессора. Предполагается, что процессор можно использовать повторно (например, во многих местах внутри вашего xml), поэтому, если вы хотите указать, что нуль не является правильным сообщением в одной маршрутизации, код в исходном сообщении будет достаточно хорош, я думаю . 31.08.2015
  • Если тело равно нулю, просто выйдите из верблюжьего маршрута. Возможно ли это? Я имею в виду от корпуса процессора? 31.08.2015

  • 3

    Это можно сделать, добавив тег <stop>.

    <choice>
        <when>
            <simple>${body} != null</simple>
            <stop></stop>            
        </when>   
        <otherwise>
            <process ref="processor2" />
            <!-- Splitter -->
            <split>
            <simple>body</simple>
            <process ref="processor3" />
            </split>
        <otherwise>
    </choice>
    
    20.07.2018
    Новые материалы

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..