Anypoint MQのサーキットブレーカーで遊んでみる

# はじめに
引き続き極小ネタです。
今回はAnypoint MQのコネクタでサーキットブレーカーの動作を確認してみます。
特に意味はないです。たまたま思いついたことで、サクッと書けそうなネタということで。申し訳ないです。

# サーキットブレーカーとは
この辺が分かり易いかと思います。
https://docs.microsoft.com/ja-jp/azure/architecture/patterns/circuit-breaker

つまるところ、
「おっ、なにやら送信に失敗したな。」
（エラーが続く）
「う～ん、直らないな。向こうで何か起こってるるのかもしれない。一旦停止しよう。」
（ちょっと待つ）
「そろそろ元に戻ったかもしれない。１回だけ送ってみるか」
「う～ん、やっぱり失敗するな。もう少し様子を見るか。」
（ちょっと待つ）
「そろそろどうかな。もう１回！おっ、送信できた！」
「復活したようだから、じゃんじゃん送るよ！」
といったような、無駄にエラーを続かせないために、ちょっと人間味のあるリトライをしてくれるよ、という機能かともやっと解釈しました。

# 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のサブスクライバのフローを作成します。
![フロー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/8647f12d-3b03-507c-2706-174a27ca957b.jpeg)
何をしているかというと、単純に最初の5回はエラーとして、6回目以降は正常に完了するだけのフローです。

Subscrberのプロパティ > Advancedは以下のように設定しました。
![プロパティ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/367531/34fd4e40-6b79-2165-ade8-4ce7d25673b5.jpeg)
「TEST:TEST」というタイプのエラーが3回続いたら、１分待ちます、といった感じです。

では、動かしてみます。
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件のメッセージが正常に処理されることが確認できます。

# 最後に
プロパティをちょろちょろと設定するだけで、簡単にこういった機能が実装できてしまうのはうれしいですね。

では