11

私はかなりの量の Apache Camel (ルーティング/メディエーション/オーケストレーション エンジン; 軽量 ESB) の経験があり、Akka の違いを理解しようと頭を悩ませています:

  • ディスパッチャー ( DispatcherPinnedDispatcherCallingThreadDispatcher)
  • ルーター
  • プール
  • グループ
  • イベントバス

ドキュメントによると:

ディスパッチャは次のとおりです。

…それがAkka Actorsを「カチカチ」させる、いわば機械のエンジンです。

しかし、それでは、ディスパッチャとは何か、またはアクターとの関係がどのようなものかについては、実際には説明されていません。

ルーターは次のとおりです。

メッセージをルーター経由で送信して、ルートと呼ばれる宛先アクターに効率的にルーティングできます。Router はアクターの内部または外部で使用でき、自分でルートを管理したり、構成機能を備えた自己完結型のルーター アクターを使用したりできます。しかし、それはディスパッチャーのようにひどく聞こえます。

プールは次のとおりです。

子アクターとしてルートを作成し、それらが終了するとルーターから削除する [のタイプ] ルーター。

グループは次のとおりです。

[タイプ] アクター [ルート] はルーターの外部で作成され、ルーターはアクターの選択を使用して、終了を監視せずに指定されたパスにメッセージを送信します。

イベントバスは次のとおりです。

...アクターのグループにメッセージを送信する方法

これは、ディスパッチャーとルーターのように聞こえます。

したがって、私の主な懸念事項は次のとおりです。

  • ディスパッチャー、ルーター、イベントバスの違いと、それぞれをいつ使用するか?
  • プールとグループをいつ使用するか?
4

1 に答える 1

21

ディスパッチャーは基本的にスレッドプールです。Akka はディスパッチャーを複数の目的で使用します (適切なメールボックスにメッセージをキューに入れる、アクターのメールボックスからメッセージを取得して処理するなど)。これらのアクションのいずれかを実行する必要があるたびに、スレッドプールからスレッドが選択され、使用されます。Akka にはデフォルトで が付属しており、ここのreference.confでを検索してdefault-dispatcher見つけることができます。を既に使用していますが、別のディスパッチャーを定義して、他の目的 (たとえば、akka-remote または akka-cluster を使用する場合の netty スレッド用) のためにスレッドプールを予約することができます。default-dispatcherdefault-dispatcher

Akkaのルーターは、ある種のルーティング ロジックを使用してメッセージをルートのリストにルーティングするアクターです。ロジックに応じて、さまざまな種類のルーターがあります。ブロードキャスト、バランシング、ラウンドロビンなど、すべて akka のドキュメントで確認できます。ルーターのルートは、プールまたはグループにすることができます。ルーターの最も一般的な使用例の 1 つは、アプリを垂直方向にスケーリングすることです。これは、システムで利用可能なすべての CPU を最大限に活用することを意味します (同時に複数のスレッドを使用します)。

プールとは、特定のタイプのルートがオンデマンドで作成されることを意味します。たとえば、3 つのインスタンスを持つRandomPoolofが必要な場合がありMyFancyActorます。Akka は の 3 つのアクターMyFancyActorと、実際のルーターとなる 4 つ目のアクターを作成します。ルーター アクターがメッセージを受け取るたびに、メッセージを 3 つのMyFancyActorアクターのいずれかに転送します。プールはアクターの再起動を処理し、そのライフサイクルを監視して、n 個のインスタンスが実行されていることを確認します。

グループとは、ルーターを定義する前にルートが作成されることを意味します。ルーターを定義したら、以前に作成したルート アクターのリストを渡す必要があります。グループはアクターのライフサイクルを監視しないため、自分で行う必要があります。

イベント バスは、アクターとの特定の種類のメッセージをサブスクライブできるチャネルです。その特定のタイプのメッセージがある場合、アクターはそれを取得します。これは、メッセージが宛先に到達できない場合の s へのサブスクライブDeadLetterや、クラスターの形成に関するイベント (akka-cluster 内) など、一部の Akka 内部で使用されます。これを使用して、 で発生するイベントを認識しますActorSystem

于 2015-06-04T04:33:38.970 に答える