0

HTTP サーバーをワーカー バーティクルとしてデプロイするときに、ワーカー スレッドによって処理されるのを待っている多数のリクエストを取得する他の方法はありますか? https://vertx.io/docs/vertx-dropwizard-metrics/java/#_pool_metricsの代替が必要です。

4

1 に答える 1

0

イベント バスの特定のアドレスにイベントを送信するたびにインクリメントし、バーティクルの処理が完了したとき (またはイベントを取得したとき) にデクリメントできる非同期カウンターを利用することができます。多くのバーティクルがあり、それぞれを変更したくない場合は、アウトバウンド インターセプターを設定できます。

vertx.eventBus().addOutboundInterceptor(deliveryContext -> {
                //you can validate if the address is what you are looking for
                if (deliveryContext.message().address().equalsIgnoreCase("http event")) {
                    //increment counter
                }
                deliveryContext.next();
            });

カバーするアドレスがたくさんある場合は、いつでも特定のヘッダーをメッセージに追加して、インターセプターでそれを探すことができますが、最悪の場合、各 .send() 呼び出しを変更する必要があることを意味します。

vertx.eventBus().addOutboundInterceptor(deliveryContext -> {
    //looking for specific header
    if (deliveryContext.message().headers().contains("incrementCounterHeader")) {
        //increment counter
    }
    deliveryContext.next();
});

//later in code
vertx.eventBus().send("http event", message,
        new DeliveryOptions().addHeader("incrementCounterHeader", "somevalue"));

最後に大事なことを言い忘れましたが、非同期カウンターを使用することにした場合、メッセージのみを伝播したい場合があります.onComplete()または.onSuccess()は、ビジネスロジックによって異なります。

これが役立つことを願っています!

于 2020-06-18T17:04:53.783 に答える