akka-camel を使用して rabbitmq 交換にサブスクライブしています。これらのアクターはいくつか作成されます... 要求ごとに 1 つroutingKey
です。交換とキューは変更されません。新しいものが要求されるたびroutingKey
に、新しいアクターを作成します。新しいチャネルが作成される代わりに、まったく新しい接続が作成されますが、これは望ましくありません。Consumer アクターが作成されるたびに新しい接続が作成される理由がよくわかりません。
アクター コードは次のとおりです。
class CommandConsumer(routingKey: String)
extends Consumer with ActorLogging {
override def endpointUri = s"rabbitmq://localhost/hub_commands?exchangeType=topic&queue=test&autoDelete=false&routingKey=$routingKey"
override def receive: Receive = {
case msg: CamelMessage => {
log.debug(s"received {}", msg.bodyAs[String])
sender ! msg.bodyAs[String]
}
}
}
私はこのようなアクターを作成しています:
context.actorOf(CommandConsumer.props("my.routing.key", sender))
アップデート
これがまさに私が達成する必要があるものです:
クライアント接続が受け入れられたときに、バックエンド アーキテクチャ内の他のコンポーネントからメッセージを受信する必要がある TCP/IP サーバーを作成しています。これを行うには、RabbitMQ を使用したいと思います。サーバーへの接続が成功すると、クライアントは ID を送信します。これは、ルーティング キーの一部として使用されます (例: command.<id>
)。最初のクライアントが接続すると、RabbitMQ 接続とキューが作成され、ルーティング キーは次のようになりますcommand.first_id
。次のクライアントが接続するときに、RabbitMQ への新しい接続を作成せずに、既に受け入れられているルーティング キーのリストにルーティング キーを追加 したいと考えています。command.second_d