глобальный обработчик исключений - мул

У нас есть требование, в котором мы хотим написать глобальный обработчик исключений, чтобы любое исключение в любом из отдельных потоков (у нас более 80 потоков мулов) было перехвачено этим глобальным обработчиком исключений.

По сути, мы хотим добавить глобальную конфигурацию и связать глобальную стратегию исключения исключения по умолчанию, чтобы здесь обрабатывалось любое исключение в любом из потоков.

Добавление каждой «стратегии исключения исключения» для каждого потока работает, но мне приходится повторять аналогичный код более 50 раз, чего я хочу избежать по очевидным причинам.

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

Примечание. Я не вижу опции стратегии глобального исключения исключения в «Глобальных элементах» пользовательского интерфейса mule.

Ссылки:

Документы, относящиеся к Mule, четко не разъясняются.

https://docs.mulesoft.com/mule-user-guide/v/3.7/error-handling

Это требование выглядит очень похожим, но не очень ясным в отношении передачи параметров и т. Д.:

Как один раз добавить глобальный обработчик исключений / регистратор в муле


person learner    schedule 09.05.2016    source источник
comment
Создайте глобальную стратегию перехвата исключений или стратегию выбора исключений (где вы можете перехватывать несколько исключений) и ссылаться на нее с помощью стратегии-исключения-ссылки в потоках. Вы прошли через docs.mulesoft.com/mule- руководство пользователя / v / 3.7 /?.   -  person star    schedule 10.05.2016
comment
Большое спасибо за ваш комментарий. Да, я это видел. В этой ссылке говорится: Если вы еще этого не сделали, создайте глобальную стратегию исключения, отката или выбора, на которую может ссылаться ваша стратегия ссылочных исключений. Но как мне его создать (используя xml, поскольку я не вижу его в пользовательском интерфейсе) - это моя проблема, и я не понимаю. Любая помощь будет оценена по достоинству.   -  person learner    schedule 10.05.2016
comment
На мой взгляд, есть 2 варианта: (1) создать глобальную стратегию исключения исключения и иметь ссылочную стратегию исключения в каждом потоке, ссылающуюся на эту глобальную политику. (2) Создайте глобальную стратегию исключения исключения и укажите ее в глобальной конфигурации. Преимущество варианта (2) в том, что нам не нужно связывать каждый существующий и будущий потоки с глобальной стратегией вылова. Однако первым шагом в любом из вышеперечисленных вариантов является создание глобальной стратегии перехвата, что не ясно из документации mule (особенно, когда я не вижу «стратегию перехвата исключений» в пользовательском интерфейсе).   -  person learner    schedule 10.05.2016
comment
В палитре Mule введите «Catch Exception», который будет отображен для вас. В противном случае наведите указатель мыши на восклицательный знак -! который присутствует в правом углу палитры Mule, он перечислит все Error Handling Component.   -  person star    schedule 10.05.2016
comment
Я не могу загрузить изображение через раздел комментариев, поэтому использую ответ.   -  person star    schedule 10.05.2016


Ответы (2)


введите здесь описание изображения Вы должны увидеть его в пользовательском интерфейсе. Не уверен, почему вы не можете. Если я правильно понимаю. Найдите скриншот.

  <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" basePath="test" doc:name="HTTP Listener Configuration"/>
     <flow name="TestFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <logger level="INFO" doc:name="Logger"/>
    <set-payload value="#['Hello World']" doc:name="Set Payload"/>
    <exception-strategy ref="Choice_Exception_Strategy" doc:name="Reference Exception Strategy"/>
</flow>
<choice-exception-strategy name="Choice_Exception_Strategy">
    <catch-exception-strategy when="exception.causeMatches(java.lang.ArithmeticException)" doc:name="Catch Exception Strategy- Arithmetic Exception">
        <logger level="INFO" doc:name="Logger"/>
    </catch-exception-strategy>
    <catch-exception-strategy doc:name="Catch Exception Strategy-All Exception">
        <logger level="INFO" doc:name="Logger"/>
    </catch-exception-strategy>
</choice-exception-strategy>

Как указано в ваших комментариях, вы можете использовать любые возможные методы, которые вам подходят.

Если вы используете старую версию. Палитра выглядит так, как в упомянутом здесь URL https://docs.mulesoft.com/mule-user-guide/v/3.7/catch-exception-strategy

person star    schedule 10.05.2016
comment
Большое спасибо. Это помогло. Мне почему-то пришла в голову эта странная мысль, что в MEL глобальная стратегия исключения catch будет с конкретными ключевыми словами (возможно, потому, что я где-то читал, что нам нужно добавить стратегию исключения catch в качестве глобального элемента, что я не смог сделать). Добавлена ​​обычная стратегия исключения исключения в глобальном масштабе, передана с использованием конфигурации, и она сработала. Спасибо еще раз. - person learner; 10.05.2016
comment
да. Правильно, stackoverflow.com/questions/9296549/. - person star; 11.05.2016

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

person pao    schedule 09.05.2016
comment
Спасибо за ваш ответ. См. Комментарий выше. - person learner; 10.05.2016