.NETのRabbitMQバックエンド

.NET エージェントは、インストゥルメント化された階層からのコールに基づいて RabbitMQ バックエンドを自動検出します。RabbitMQ イグジットポイントは、メッセージをキューにパブリッシュまたはプッシュするメソッドです。RabbitMQ エントリポイントは、キュー内の新しいメッセージをリッスンまたはポーリングするメソッドです。

注: .NET は、すべてのプラットフォームの RabbitMQ クライアント 6.0.0 以上で BasicPublish および BasicConsume のサポートを拡張しています。

MSMQ トランスポート経由で NServiceBus を使用している場合は、「 .NETのNServiceBusバックエンド」を参照してください。

イグジットポイントとバックエンドの命名

アプリケーションが BasicPublish() を使用してキューにメッセージを送信すると、エージェントは RabbitMQ バックエンド イグジットポイントを検出します

デフォルトでは、エージェントは BasicPublish() の exchange パラメータで RabbitMQ バックエンドに名前を付けます

例:

CODE
model.BasicPublish("MyExchange", "", false, false,
basicProperties, Encoding.UTF8.GetBytes(message));

この場合、エージェントはキューに MyExchange という名前を付けます。RabbitMQ バックエンド名

バックエンド名を変更して、ルーティングキーの一部または全セグメントを含むようにすることもできます。RabbitMQの命名を構成するには、インストゥルメンテーションのRabbitMQ交換およびルーティングキーの実装をよく理解している必要があります。「RabbitMQ 交換と交換の種類」を参照してください。

バックエンド命名の再設定

rmqsegments ノードプロパティを登録します。ノードプロパティの設定方法については、「アプリケーション エージェントのノードプロパティ」を参照してください。

名前:rmqsegments説明:"Configure RabbitMQ naming to include routing key segments."タイプ:整数値:<integer>ルーティングキーは文字列です。エージェントはルーティングキーのドット(.)で区切られているサブ文字列をセグメントとして扱います。値を、名前に含めるルーティングキーセグメントの数を表す整数に設定します。

以下の例では、ルーティングキーは "abc.def.ghi" です。rmqsegments の値を「2」に設定し、キューを "MyExchange.abc.def" と命名します。

CODE
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 クライアント:

JSON
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 クライアント:

JSON
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 を検出