アップストリームサービスとの相関
ティアに PHP エージェントでサポートされているエントリポイントではないアップストリームサービスがあり、そのアップストリームサービスと相関する必要がある分散ビジネストランザクションがある場合は、ダウンストリームティアで appdynamics_continue_transaction() を使用し、サービスからの相関ヘッダーを渡して、トランザクション相関を維持します。
次のサンプルに示すように、サービスから相関ヘッダを抽出する必要があります。サンプルの関数は、AMQP メッセージキュー内の各メッセージから相関ヘッダーを抽出し、appdynamics_continue_transaction() に渡します。
メッセージを処理した後、appdynamics_end_transaction() をコールします。これにより、コール元のティアでトランザクションの継続が終了します。appdynamics_end_transaction() コールは、そのティアが別のダウンストリームティアに対して分散コールを行う場合、分散トランザクション全体を終了しません。
function amqp_receive($exchangeName, $routingKey, $queueName) {
$amqpConnection = amqp_connection();
$channel = new AMQPChannel($amqpConnection);
$queue = new AMQPQueue($channel);
$queue->setName($queueName);
$queue->bind($exchangeName, $routingKey);
while($message = $queue->get()) {
// Extracting the correlation header.
echo("Message #".$message->getDeliveryTag()." '".$message->getBody()."'");
echo("Correlation header: " . $message->getHeader("singularityheader"));
// Passing correlation header to API.
appdynamics_continue_transaction($message->getHeader("singularityheader"));
doStuff($message);
// End transaction.
appdynamics_end_transaction();
}
if(!$amqpConnection->disconnect()) {
throw new Exception("Could not disconnect !");
}
}サービスがサポートされていないエントリーポイントで、分散コールを実行しない場合、ティアはアップストリームトランザクションと相関されません。