はじめに
引き続き極小ネタです。
今回はAnypoint MQのコネクタでサーキットブレーカーの動作を確認してみます。
特に意味はないです。たまたま思いついたことで、サクッと書けそうなネタということで。申し訳ないです。
サーキットブレーカーとは
この辺が分かり易いかと思います。
https://docs.microsoft.com/ja-jp/azure/architecture/patterns/circuit-breaker
つまるところ、
「おっ、なにやら送信に失敗したな。」
(エラーが続く)
「う~ん、直らないな。向こうで何か起こってるるのかもしれない。一旦停止しよう。」
(ちょっと待つ)
「そろそろ元に戻ったかもしれない。1回だけ送ってみるか」
「う~ん、やっぱり失敗するな。もう少し様子を見るか。」
(ちょっと待つ)
「そろそろどうかな。もう1回!おっ、送信できた!」
「復活したようだから、じゃんじゃん送るよ!」
といったような、無駄にエラーを続かせないために、ちょっと人間味のあるリトライをしてくれるよ、という機能かともやっと解釈しました。
Anypoint MQのサーキットブレーカーで遊んでみる
では、Anypoint MQのサーキットブレーカーを触ってみようと思います。
コネクタの説明はこの辺に呼んでくださいませ。
https://docs.mulesoft.com/jp/connectors/anypoint-mq/anypoint-mq-listener#%E3%82%B5%E3%83%BC%E3%82%AD%E3%83%83%E3%83%88%E3%83%96%E3%83%AC%E3%83%BC%E3%82%AB
まずは、こんな感じのPub/Subのサブスクライバのフローを作成します。
何をしているかというと、単純に最初の5回はエラーとして、6回目以降は正常に完了するだけのフローです。
Subscrberのプロパティ > Advancedは以下のように設定しました。
「TEST:TEST」というタイプのエラーが3回続いたら、1分待ちます、といった感じです。
では、動かしてみます。
test1~3というメッセージをキューに配置して、このサブスクライバのフローの動作をさせた結果のログです。
*******************************************************************************************************
* - - + APPLICATION + - - * - - + DOMAIN + - - * - - + STATUS + - - *
*******************************************************************************************************
* demo_publisher * default * DEPLOYED *
* demo_subscriber1 * default * DEPLOYED *
*******************************************************************************************************
INFO 2019-12-21 11:15:51,434 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: cb60e420-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: start publisher [test1]
INFO 2019-12-21 11:15:51,936 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: cb60e420-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: end publisher [test1]
ERROR 2019-12-21 11:15:52,499 [[MuleRuntime].io.02: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: cfaeba71-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : An error occurred.
Error type : TEST:TEST
Element : demosubscriber1Flow/processors/1/route/1/processors/1 @ demo_subscriber1:demosubscriber1.xml:27 (Raise error)
Element XML : <raise-error doc:name="Raise error" doc:id="90e5046c-ffa0-4410-a64f-6bd972887ce1" type="TEST:TEST"></raise-error>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
ERROR 2019-12-21 11:15:52,936 [[MuleRuntime].io.01: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: d036fd40-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : An error occurred.
Error type : TEST:TEST
Element : demosubscriber1Flow/processors/1/route/1/processors/1 @ demo_subscriber1:demosubscriber1.xml:27 (Raise error)
Element XML : <raise-error doc:name="Raise error" doc:id="90e5046c-ffa0-4410-a64f-6bd972887ce1" type="TEST:TEST"></raise-error>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
ERROR 2019-12-21 11:15:53,126 [[MuleRuntime].io.02: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: d05cfbd0-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : An error occurred.
Error type : TEST:TEST
Element : demosubscriber1Flow/processors/1/route/1/processors/1 @ demo_subscriber1:demosubscriber1.xml:27 (Raise error)
Element XML : <raise-error doc:name="Raise error" doc:id="90e5046c-ffa0-4410-a64f-6bd972887ce1" type="TEST:TEST"></raise-error>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
INFO 2019-12-21 11:15:55,787 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: d1f68790-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: start publisher [test2]
INFO 2019-12-21 11:15:56,176 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: d1f68790-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: end publisher [test2]
INFO 2019-12-21 11:15:58,903 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: d3d1fe50-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: start publisher [test3]
INFO 2019-12-21 11:15:59,055 [[MuleRuntime].cpuLight.02: [demo_publisher].demopublisherFlow.CPU_LITE @3d5dfcd8] [event: d3d1fe50-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: end publisher [test3]
ERROR 2019-12-21 11:16:53,609 [[MuleRuntime].io.03: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: f46c17e0-2397-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : An error occurred.
Error type : TEST:TEST
Element : demosubscriber1Flow/processors/1/route/1/processors/1 @ demo_subscriber1:demosubscriber1.xml:27 (Raise error)
Element XML : <raise-error doc:name="Raise error" doc:id="90e5046c-ffa0-4410-a64f-6bd972887ce1" type="TEST:TEST"></raise-error>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
ERROR 2019-12-21 11:17:59,466 [[MuleRuntime].io.01: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: 1bad12f0-2398-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:
********************************************************************************
Message : An error occurred.
Error type : TEST:TEST
Element : demosubscriber1Flow/processors/1/route/1/processors/1 @ demo_subscriber1:demosubscriber1.xml:27 (Raise error)
Element XML : <raise-error doc:name="Raise error" doc:id="90e5046c-ffa0-4410-a64f-6bd972887ce1" type="TEST:TEST"></raise-error>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
INFO 2019-12-21 11:19:03,603 [[MuleRuntime].io.03: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: 41e6b020-2398-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: demo_subscriber_1 [test2]
INFO 2019-12-21 11:19:03,979 [[MuleRuntime].io.01: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: 4221bd50-2398-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: demo_subscriber_1 [test3]
INFO 2019-12-21 11:19:04,126 [[MuleRuntime].io.01: [demo_subscriber1].demosubscriber1Flow.BLOCKING @787776b6] [event: 42382b80-2398-11ea-a607-7470fd71e47b] org.mule.runtime.core.internal.processor.LoggerMessageProcessor: demo_subscriber_1 [test1]
INFO 2019-12-21 11:19:14,704 [qtp1053539698-33] com.mulesoft.agent.services.AgentStudioManagementService: Received request to stop runtime
最初に3回、立て続けにエラーとなった後、1分毎に2回処理がエラーとなり、さらに1分後、3件のメッセージが正常に処理されることが確認できます。
最後に
プロパティをちょろちょろと設定するだけで、簡単にこういった機能が実装できてしまうのはうれしいですね。
では