Round Robin (<component-xml-root/>)

2 つ以上の処理ルートが提供され、フローでコンポーネントが実行されるたびに 1 つのルートのみが実行されます。

Round Robin 内の各ルートは、1 つ以上のプロセッサーを含むことができるスコープです。Round Robin は最初のルートから Mule イベントへのルート内でプロセッサーの実行を開始し、結果をフローの次のプロセッサーに送信します。Round Robin は前回選択したルートを記録し、同じルートを連続して使用することはありません。たとえば、Round Robin が最初に実行されると、コンポーネントによって最初のルートが選択されます。次回の実行時には 2 番目のルートが選択されます。前回選択されたルートが最後のルートだった場合、最初のルートが実行されます。

Round Robin に達した Mule イベントのペイロード、変数、属性はルート内で処理を行うためにアクセスできます。ルート内の Mule イベントを変更すると、Round Robin 後のプロセッサーに伝播されます。

コンポーネント XML

このコンポーネントは、次の XML 構造をサポートします。

<round-robin
  doc:name="Round robin"
  doc:id="kaykco" >
  <!-- First processing route -->
  <route>
    <!-- Processors -->
  </route>
  <!-- Second processing route -->
  <route>
    <!-- Processors -->
  </route>

</round-robin>
<round-robin/>​ Attributes 説明

doc:name

コンポーネントの編集可能な名前。

doc:id

コンポーネントの自動生成された識別子。

tracking:enable-default-events

true​ に設定すると、ビジネスイベント機能がアクティブ化されます。

次の例では、2 つの処理ルートが設定されている Round Robin を設定します。

<flow name="round-robin-ex" >
  <scheduler doc:name="Scheduler" > (1)
    <scheduling-strategy >
      <fixed-frequency frequency="10" timeUnit="SECONDS"/>
    </scheduling-strategy>
  </scheduler>
  <set-payload value="#[[1,2,3,4]]" doc:name="Set Payload" /> (2)
  <logger level="INFO" doc:name="Logger"
          category="PAYLOAD BEFORE ROUND ROBIN"
  	message="#[payload]"/> (3)
  <round-robin doc:name="Round Robin" >
    <route > (4)
      <set-payload value="#[payload - 4]" doc:name="Set Payload" />
      <logger level="INFO" doc:name="Logger"
              message="#[%dw 2.0&#10;output application/json&#10;---&#10;{ 'r1' : payload}]"
	      category="ROUTE 1 PAYLOAD"/>
    </route>
    <route > (5)
      <set-payload value="#[payload + 5]" doc:name="Set Payload" />
        <logger level="INFO" doc:name="Logger"
                message="#[%dw 2.0&#10;output application/json&#10;---&#10;{'r2' : payload}]"
                category="ROUTE 2 PAYLOAD"/>
    </route>
  </round-robin>
  <logger level="INFO" doc:name="Logger"
           message="#[payload]"
	   category="PAYLOAD OUTSIDE ROUND ROBIN"/> (6)
</flow>
1 Scheduler (​<scheduler/>​) が 10 秒ごとにフローを実行します。
2 Set Payload (​<set-payload/>​) によって配列 ​[1,2,3,4]​ が提供されます。
3 Round Robin の​​の Loggerコンポーネントによって最初のペイロード ​[1,2,3,4]​ が出力されます。
4 Round Robin の​最初​のルート (​<route/>​) である Set Payload コンポーネントによって、DataWeave 式 ​payload - 4​ を使用して最初のペイロードの最後の要素が削除され、そのルートの Logger によって生成されたペイロードがキー ​"r1"​ の値 ​{ "r1": [1,2,3] }​ として出力されます。
5 Round Robin の ​2 つ目​のルート (​<route/>​) である Set Payload コンポーネントによって、DataWeave 式 ​payload + 5​ を使用して新しい要素が最初のペイロードに追加され、そのルートの Logger によって生成されたペイロードがキー ​"r2"​ の値 ​{ "r2": [1,2,3,4,5] }​ として出力されます。
6 Round Robin の​​の Logger コンポーネントによって、Round Robin の実行によって処理されたルートのペイロードが出力されます。最初の実行では ​[1, 2, 3]​ が出力されます。次の実行では ​[1, 2, 3, 4, 5]​ が出力されます。その次には ​[1, 2, 3]​ が出力される、といった具合になります。

次の抜粋では、ログに Round Robin ルーターの 3 つの実行が表示されています。この例では、フローによって ID が ​4df56260​、​53eb1c50​、​59e12460​ で始まる Mule イベントが処理されます(この例は読みやすくするために編集されています)。

...

INFO  2022-12-19 10:02:30,233 ...event: 4df56260-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD BEFORE ROUND ROBIN: [1, 2, 3, 4]
INFO  2022-12-19 10:02:30,290 ...event: 4df56260-7fc7-11ed-957f-147ddaaf4f97]
      ROUTE 1 PAYLOAD: { "r1": [1,2,3] }
INFO  2022-12-19 10:02:30,291 ...event: 4df56260-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD OUTSIDE ROUND ROBIN: [1, 2, 3]

INFO  2022-12-19 10:02:40,154 ...event: 53eb1c50-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD BEFORE ROUND ROBIN: [1, 2, 3, 4]
INFO  2022-12-19 10:02:40,167 ...event: 53eb1c50-7fc7-11ed-957f-147ddaaf4f97]
      ROUTE 2 PAYLOAD: { "r2": [1, 2, 3, 4, 5] }
INFO  2022-12-19 10:02:40,168 ...event: 53eb1c50-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD OUTSIDE ROUND ROBIN: [1, 2, 3, 4, 5]

INFO  2022-12-19 10:02:50,151 ...event: 59e12460-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD BEFORE ROUND ROBIN: [1, 2, 3, 4]
INFO  2022-12-19 10:02:50,154 ...event: 59e12460-7fc7-11ed-957f-147ddaaf4f97]
      ROUTE 1 PAYLOAD: { "r1": [1, 2, 3] }
INFO  2022-12-19 10:02:50,154 ...event: 59e12460-7fc7-11ed-957f-147ddaaf4f97]
      PAYLOAD OUTSIDE ROUND ROBIN: [1, 2, 3]

...