10

Azure 上のイベント ハブにメッセージを送信する EventHub クライアント アプリケーションを作成しています。送信するメッセージがある場合 (5 ~ 6 秒ごと)、EventHubClient クラスの新しいインスタンスを作成し、それを使用してデータを送信します。

    public async static void SendListOfMeasurements(string eventHubName, string connectionString, List<Measurement> measurementsList, int maxMessageSize)
    {
        // Create EventHubClient
        EventHubClient client = EventHubClient.CreateFromConnectionString(
            connectionString,
            eventHubName);
        ...

それは良い習慣ですか?それとも、起動時だけ作成して、あとは.Sendメソッドだけを使ったほうがいいのでしょうか? パフォーマンスの点で最適なシナリオは何ですか? 将来的には、送信の量とメッセージの量が増加する可能性があります

4

4 に答える 4

3

いいえ、初回のみ MessageFactory を使用して新しい EventHubClient を作成する必要があります。送信するすべてのメッセージに対してクライアントを作成すると、新しい接続が作成され、古い接続が開かれたままになり (netstat を使用してチェック)、多くの「ESTABILISHED」接続が発生します。

最初のメッセージ用に作成された単一のクライアントを使用してから、他のメッセージ用にそのクライアントを再利用します。インターネット接続が失われてから戻ってきた場合、tcp 接続は自動的に再作成されます。

于 2015-10-19T14:38:38.133 に答える
1

factory を使用したクライアント作成の例を次に示します。

            var endpointUri = ServiceBusEnvironment.CreateServiceUri("sb", eventHubNamespace, string.Empty);

            MessagingFactory factory = MessagingFactory.Create(endpointUri, new MessagingFactorySettings
            {
                TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(sasToken),
                TransportType = TransportType.Amqp
            });

            factory.RetryPolicy = new RetryExponential(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(30), 3);

            client = factory.CreateEventHubClient(eventHubName);
于 2016-11-14T08:18:02.667 に答える
-2

EventHubClientはい、そのとおりです。毎回新しいものを作成できます。問題ありません。

内部的には、接続文字列が同じ場合、基になる同じ TCP 接続を再利用します。使用するメソッドEventHubClientの結果をキャッシュします。MessageFactory.Create(...)

于 2015-09-25T12:51:52.030 に答える