.NETのRabbitMQバックエンド
.NET エージェントは、インストゥルメント化された階層からのコールに基づいて RabbitMQ バックエンドを自動検出します。RabbitMQ イグジットポイントは、メッセージをキューにパブリッシュまたはプッシュするメソッドです。RabbitMQ エントリポイントは、キュー内の新しいメッセージをリッスンまたはポーリングするメソッドです。
MSMQ トランスポート経由で NServiceBus を使用している場合は、「 .NETのNServiceBusバックエンド」を参照してください。
イグジットポイントとバックエンドの命名
アプリケーションが BasicPublish() を使用してキューにメッセージを送信すると、エージェントは RabbitMQ バックエンド イグジットポイントを検出します
デフォルトでは、エージェントは BasicPublish() の exchange パラメータで RabbitMQ バックエンドに名前を付けます
例:
model.BasicPublish("MyExchange", "", false, false,
basicProperties, Encoding.UTF8.GetBytes(message));
この場合、エージェントはキューに MyExchange という名前を付けます。
バックエンド名を変更して、ルーティングキーの一部または全セグメントを含むようにすることもできます。RabbitMQの命名を構成するには、インストゥルメンテーションのRabbitMQ交換およびルーティングキーの実装をよく理解している必要があります。「RabbitMQ 交換と交換の種類」を参照してください。
バックエンド命名の再設定
rmqsegments ノードプロパティを登録します。ノードプロパティの設定方法については、「アプリケーション エージェントのノードプロパティ」を参照してください。
名前:rmqsegments説明:"Configure RabbitMQ naming to include routing key segments."タイプ:整数値:<integer>ルーティングキーは文字列です。エージェントはルーティングキーのドット(.)で区切られているサブ文字列をセグメントとして扱います。値を、名前に含めるルーティングキーセグメントの数を表す整数に設定します。
以下の例では、ルーティングキーは "abc.def.ghi" です。rmqsegments の値を「2」に設定し、キューを "MyExchange.abc.def" と命名します。
model.BasicPublish("MyExchange", "abc.def.ghi", false, false,
basicProperties, Encoding.UTF8.GetBytes(message));
ノードプロパティを保存すると、コントローラがエージェントに構成を送信します。しばらくすると、RabbitMQバックエンドが新たな名前で表示されます。
エントリポイント
アプリケーションがキューをポーリングすると、エージェントは RabbitMQ バックエンドのエントリポイントを検出します。Splunk AppDynamics は以下のパターンに基づいて RabbitMQ を自動検出します。
BasicGetメソッド
エージェントは、アプリケーションが BasicGet() を使ってメッセージキューを定期的にポーリングする場合、while BasicGet BasicGet if を含む以下のパターンを検出します。
バージョン 6.x より前の RabbitMQ クライアント:
while (true)
{
var result = channel.BasicGet("MyExchange", true);
if (result != null)
{
var body = result.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("Received: {0}.", message);
}
Thread.Sleep(5000);
}
バージョン 6.x の RabbitMQ クライアント:
while (true)
{
var result = channel.BasicGet("MyExchange", true);
if (result != null)
{
var body = result.Body.ToArray()
var message = Encoding.UTF8.GetString(body);
Console.WriteLine("Received: {0}.", message);
}
Thread.Sleep(5000);
}
HandleBasicDeliverメソッド
エージェントが HandleBasicDeliver()、IBasicConsumer、HandleBasicDeliver を検出