Java を使用して Azure Event Hubs との間でイベントを送受信する (azure-eventhubs)Use Java to send events to or receive events from Azure Event Hubs (azure-eventhubs)

このクイックスタートでは、azure-eventhubs Java パッケージを使用して、イベント ハブとの間でイベントを送受信する方法について説明します。This quickstart shows how to send events to and receive events from an event hub using the azure-eventhubs Java package.

警告

このクイックスタートでは、以前の azure-eventhubs パッケージと azure-eventhubs-eph パッケージを使用します。This quickstart uses the old azure-eventhubs and azure-eventhubs-eph packages. 最新の azure-messaging-eventhubs パッケージを使用するクイックスタートについては、azure-messaging-eventhubs を使用したイベントの送受信に関するページを参照してください。For a quickstart that uses the latest azure-messaging-eventhubs package, see Send and receive events using azure-messaging-eventhubs. 古いパッケージではなく新しいパッケージを使用するようにアプリケーションを移行するには、azure-eventhubs から azure-messaging-eventhubs への移行ガイドに関するページを参照してください。To move your application from using the old package to new one, see the Guide to migrate from azure-eventhubs to azure-messaging-eventhubs.

前提条件Prerequisites

Azure Event Hubs を初めて使用する場合は、このクイックスタートを行う前にイベント ハブの概要を参照してください。If you are new to Azure Event Hubs, see Event Hubs overview before you do this quickstart.

このクイック スタートを完了するには、次の前提条件を用意しておく必要があります。To complete this quickstart, you need the following prerequisites:

  • Microsoft Azure サブスクリプションMicrosoft Azure subscription. Azure Event Hubs を含む Azure サービスを使用するには、サブスクリプションが必要です。To use Azure services, including Azure Event Hubs, you need a subscription. 既存の Microsoft Azure アカウントをお持ちでない場合は、アカウントを作成する際に、無料試用版にサインアップするか、MSDN サブスクライバー特典を利用できます。If you don't have an existing Azure account, you can sign up for a free trial or use your MSDN subscriber benefits when you create an account.
  • Java 開発環境。A Java development environment. このクイックスタートでは Eclipse を使用します。This quickstart uses Eclipse.
  • Event Hubs 名前空間とイベント ハブを作成するCreate an Event Hubs namespace and an event hub. 最初の手順では、Azure Portal を使用して Event Hubs 型の名前空間を作成し、アプリケーションがイベント ハブと通信するために必要な管理資格情報を取得します。The first step is to use the Azure portal to create a namespace of type Event Hubs, and obtain the management credentials your application needs to communicate with the event hub. 名前空間とイベント ハブを作成するには、こちらの記事の手順に従います。To create a namespace and an event hub, follow the procedure in this article. その後、次の記事の手順に従って、イベント ハブ用のアクセス キーの値を取得します。接続文字列を取得するThen, get the value of access key for the event hub by following instructions from the article: Get connection string. このクイックスタートの後半で記述するコードで、このアクセス キーを使用します。You use the access key in the code you write later in this quickstart. 既定のキー名は次のとおりです:RootManageSharedAccessKeyThe default key name is: RootManageSharedAccessKey.

送信イベントSend events

このセクションでは、イベント ハブにイベントを送信する Java アプリケーションの作成方法を説明します。This section shows you how to create a Java application to send events an event hub.

注意

このクイック スタートをサンプルとして GitHub からダウンロードし、EventHubConnectionStringEventHubName の文字列を対象のイベント ハブの値に置き換え、実行します。You can download this quickstart as a sample from the GitHub, replace EventHubConnectionString and EventHubName strings with your event hub values, and run it. または、このクイックスタートの手順に従って独自のものを作成します。Alternatively, you can follow the steps in this quickstart to create your own.

Azure Event Hubs ライブラリへの参照を追加するAdd reference to Azure Event Hubs library

Maven Central Repository の Maven プロジェクトで Event Hub 用の Java クライアント ライブラリを使用できます。The Java client library for Event Hubs is available for use in Maven projects from the Maven Central Repository. Maven プロジェクト ファイル内で次の依存関係宣言を使用して、このライブラリを参照できます。You can reference this library using the following dependency declaration inside your Maven project file:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-eventhubs</artifactId>
    <version>2.2.0</version>
</dependency>

ビルド環境の種類に応じて、Maven Central Repository から最新リリースの JAR ファイルを明示的に取得できます。For different types of build environments, you can explicitly obtain the latest released JAR files from the Maven Central Repository.

単純なイベント パブリッシャーの場合は、Event Hubs クライアント クラス用の com.microsoft.azure.eventhubs パッケージと、Azure Service Bus メッセージング クライアントと共有される一般的な例外などのユーティリティ クラス用の com.microsoft.azure.servicebus パッケージをインポートします。For a simple event publisher, import the com.microsoft.azure.eventhubs package for the Event Hubs client classes and the com.microsoft.azure.servicebus package for utility classes such as common exceptions that are shared with the Azure Service Bus messaging client.

イベント ハブにメッセージを送信するコードの記述Write code to send messages to the event hub

次のサンプルでは、最初に、好みの Java 開発環境でコンソール/シェル アプリケーション用の新しい Maven プロジェクトを作成します。For the following sample, first create a new Maven project for a console/shell application in your favorite Java development environment. SimpleSend という名前のクラスを追加し、このクラスに次のコードを追加します。Add a class named SimpleSend, and add the following code to the class:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.microsoft.azure.eventhubs.ConnectionStringBuilder;
import com.microsoft.azure.eventhubs.EventData;
import com.microsoft.azure.eventhubs.EventHubClient;
import com.microsoft.azure.eventhubs.EventHubException;

import java.io.IOException;
import java.nio.charset.Charset;
import java.time.Instant;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

public class SimpleSend {

    public static void main(String[] args)
            throws EventHubException, ExecutionException, InterruptedException, IOException {
            
            
    }
 }

接続文字列を作成するConstruct connection string

ConnectionStringBuilder クラスを使用して、Event Hubs クライアント インスタンスに渡す接続文字列の値を作成します。Use the ConnectionStringBuilder class to construct a connection string value to pass to the Event Hubs client instance. プレースホルダーは、名前空間とイベント ハブの作成時に取得した値に置き換えます。Replace the placeholders with the values you obtained when you created the namespace and event hub:

        final ConnectionStringBuilder connStr = new ConnectionStringBuilder()
                .setNamespaceName("<EVENTHUB NAMESPACE") 
                .setEventHubName("EVENT HUB")
                .setSasKeyName("RootManageSharedAccessKey")
                .setSasKey("SHARED ACCESS KEY");

イベントを送信するコードを記述するWrite code to send events

文字列を UTF-8 バイト エンコードに変換して単数のイベントを作成します。Create a singular event by transforming a string into its UTF-8 byte encoding. その後、接続文字列から新しい Event Hubs クライアント インスタンスを作成し、メッセージを送信します。Then, create a new Event Hubs client instance from the connection string and send the message:

        final Gson gson = new GsonBuilder().create();

        // The Executor handles all asynchronous tasks and this is passed to the EventHubClient instance.
        // This enables the user to segregate their thread pool based on the work load.
        // This pool can then be shared across multiple EventHubClient instances.
        // The following sample uses a single thread executor, as there is only one EventHubClient instance,
        // handling different flavors of ingestion to Event Hubs here.
        final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(4);

        // Each EventHubClient instance spins up a new TCP/SSL connection, which is expensive.
        // It is always a best practice to reuse these instances. The following sample shows this.
        final EventHubClient ehClient = EventHubClient.createSync(connStr.toString(), executorService);


        try {
            for (int i = 0; i < 10; i++) {

                String payload = "Message " + Integer.toString(i);
                byte[] payloadBytes = gson.toJson(payload).getBytes(Charset.defaultCharset());
                EventData sendEvent = EventData.create(payloadBytes);

                // Send - not tied to any partition
                // Event Hubs service will round-robin the events across all Event Hubs partitions.
                // This is the recommended & most reliable way to send to Event Hubs.
                ehClient.sendSync(sendEvent);
            }

            System.out.println(Instant.now() + ": Send Complete...");
            System.out.println("Press Enter to stop.");
            System.in.read();
        } finally {
            ehClient.closeSync();
            executorService.shutdown();
        }

プログラムをビルドして実行し、エラーがないことを確認します。Build and run the program, and ensure that there are no errors.

お疲れさまでした。Congratulations! メッセージをイベント ハブに送信しました。You have now sent messages to an event hub.

付録: EventHub パーティションへのメッセージのルーティング動作Appendix: How messages are routed to EventHub partitions

コンシューマーがメッセージを取得するためには、あらかじめパブリッシャーがそのメッセージをパーティションに発行する必要があります。Before messages are retrieved by consumers, they have to be published to the partitions first by the publishers. com.microsoft.azure.eventhubs.EventHubClient オブジェクトの sendSync() メソッドを使ってイベント ハブに同期的にメッセージを発行するとき、パーティション キーが指定されているかどうかに応じて、そのメッセージは特定のパーティションに送信されるか、または利用可能なすべてのパーティションにラウンド ロビン方式で分散されます。When messages are published to event hub synchronously using the sendSync() method on the com.microsoft.azure.eventhubs.EventHubClient object, the message could be sent to a specific partition or distributed to all available partitions in a round-robin manner depending on whether the partition key is specified or not.

パーティション キーを表す文字列が指定されている場合、そのキーをハッシュすることによって、イベントの送信先となるパーティションが決定されます。When a string representing the partition key is specified, the key will be hashed to determine which partition to send the event to.

パーティション キーが設定されていない場合は、利用可能なすべてのパーティションに対してラウンド ロビン式にメッセージが分散されますWhen the partition key is not set, then messages will round-robined to all available partitions

// Serialize the event into bytes
byte[] payloadBytes = gson.toJson(messagePayload).getBytes(Charset.defaultCharset());

// Use the bytes to construct an {@link EventData} object
EventData sendEvent = EventData.create(payloadBytes);

// Transmits the event to event hub without a partition key
// If a partition key is not set, then we will round-robin to all topic partitions
eventHubClient.sendSync(sendEvent);

//  the partitionKey will be hash'ed to determine the partitionId to send the eventData to.
eventHubClient.sendSync(sendEvent, partitionKey);

// close the client at the end of your program
eventHubClient.closeSync();

受信イベントReceive events

このチュートリアルのコードは GitHub の EventProcessorSample コードに基づくものであり、完全に動作するアプリケーションを表示する場合に確認することができます。The code in this tutorial is based on the EventProcessorSample code on GitHub, which you can examine to see the full working application.

Java の EventProcessorHost を使用したメッセージの受信Receive messages with EventProcessorHost in Java

EventProcessorHost は、永続的なチェックポイントと、Event Hubs からの並列受信を管理することで、Event Hubs のイベントの受信を簡素化する Java クラスです。EventProcessorHost is a Java class that simplifies receiving events from Event Hubs by managing persistent checkpoints and parallel receives from those Event Hubs. EventProcessorHost を使用すると、異なる複数のノードでホストされている場合でも、複数の受信側の間でイベントを分割することができます。Using EventProcessorHost, you can split events across multiple receivers, even when hosted in different nodes. この例では、受信側が単一の場合に EventProcessorHost を使用する方法を示します。This example shows how to use EventProcessorHost for a single receiver.

ストレージ アカウントの作成Create a storage account

EventProcessorHost を使用するには、[Azure Storage アカウント][Azure Storage アカウント]が必要です。To use EventProcessorHost, you must have an [Azure Storage account][Azure Storage account]:

  1. Azure portal にサインインし、画面左側の [Create a resource](リソースの作成) を選択します。Sign in the Azure portal, and select Create a resource on the left-hand side of the screen.

  2. [ストレージ] を選択し、 [ストレージ アカウント] を選択します。Select Storage, then select Storage account. [ストレージ アカウントの作成] ウィンドウで、ストレージ アカウントの名前を入力します。In the Create storage account window, type a name for the storage account. 残りのフィールドを完了し、目的の地域を選択し、 [作成] を選択します。Complete the rest of the fields, select your desired region, and then select Create.

    Azure portal でストレージ アカウントを作成する

  3. 新しく作成したストレージ アカウントを選択し、 [アクセス キー] を選択します。Select the newly created storage account, and then select Access Keys:

    Azure portal でアクセス キーを取得する

    key1 の値を一時的な場所にコピーします。Copy the key1 value to a temporary location. このチュートリアルの後の方で、それを使用します。You use it later in this tutorial.

EventProcessor ホストを使用した Java プロジェクトの作成Create a Java project using the EventProcessor Host

Event Hubs の Java クライアント ライブラリは、 Maven セントラル リポジトリの Maven プロジェクトで利用でき、Maven プロジェクト ファイル内の以下の依存関係宣言を使用して参照できます。The Java client library for Event Hubs is available for use in Maven projects from the Maven Central Repository, and can be referenced using the following dependency declaration inside your Maven project file:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-eventhubs</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-eventhubs-eph</artifactId>
    <version>2.4.0</version>
</dependency>

ビルド環境の種類に応じて、Maven Central Repository から最新リリースの JAR ファイルを明示的に取得できます。For different types of build environments, you can explicitly obtain the latest released JAR files from the Maven Central Repository.

  1. 次のサンプルでは、最初に、好みの Java 開発環境でコンソール/シェル アプリケーション用の新しい Maven プロジェクトを作成します。For the following sample, first create a new Maven project for a console/shell application in your favorite Java development environment. このクラスは ErrorNotificationHandlerと呼ばれます。The class is called ErrorNotificationHandler.

    import java.util.function.Consumer;
    import com.microsoft.azure.eventprocessorhost.ExceptionReceivedEventArgs;
    
    public class ErrorNotificationHandler implements Consumer<ExceptionReceivedEventArgs>
    {
        @Override
        public void accept(ExceptionReceivedEventArgs t)
        {
            System.out.println("SAMPLE: Host " + t.getHostname() + " received general error notification during " + t.getAction() + ": " + t.getException().toString());
        }
    }
    
  2. 次のコードで EventProcessorSampleという新しいクラスを作成します。Use the following code to create a new class called EventProcessorSample. プレースホルダーを、イベント ハブとストレージ アカウントの作成時に使用した値に置き換えます。Replace the placeholders with the values used when you created the event hub and storage account:

    package com.microsoft.azure.eventhubs.samples.eventprocessorsample;
    
    import com.microsoft.azure.eventhubs.ConnectionStringBuilder;
    import com.microsoft.azure.eventhubs.EventData;
    import com.microsoft.azure.eventprocessorhost.CloseReason;
    import com.microsoft.azure.eventprocessorhost.EventProcessorHost;
    import com.microsoft.azure.eventprocessorhost.EventProcessorOptions;
    import com.microsoft.azure.eventprocessorhost.ExceptionReceivedEventArgs;
    import com.microsoft.azure.eventprocessorhost.IEventProcessor;
    import com.microsoft.azure.eventprocessorhost.PartitionContext;
    
    import java.util.concurrent.ExecutionException;
    import java.util.function.Consumer;
    
    public class EventProcessorSample
    {
        public static void main(String args[]) throws InterruptedException, ExecutionException
        {
            String consumerGroupName = "$Default";
            String namespaceName = "----NamespaceName----";
            String eventHubName = "----EventHubName----";
            String sasKeyName = "----SharedAccessSignatureKeyName----";
            String sasKey = "----SharedAccessSignatureKey----";
            String storageConnectionString = "----AzureStorageConnectionString----";
            String storageContainerName = "----StorageContainerName----";
            String hostNamePrefix = "----HostNamePrefix----";
    
            ConnectionStringBuilder eventHubConnectionString = new ConnectionStringBuilder()
                 .setNamespaceName(namespaceName)
                 .setEventHubName(eventHubName)
                 .setSasKeyName(sasKeyName)
                 .setSasKey(sasKey);
    
            EventProcessorHost host = new EventProcessorHost(
                 EventProcessorHost.createHostName(hostNamePrefix),
                 eventHubName,
                 consumerGroupName,
                 eventHubConnectionString.toString(),
                 storageConnectionString,
                 storageContainerName);
    
            System.out.println("Registering host named " + host.getHostName());
            EventProcessorOptions options = new EventProcessorOptions();
            options.setExceptionNotification(new ErrorNotificationHandler());
    
            host.registerEventProcessor(EventProcessor.class, options)
            .whenComplete((unused, e) ->
            {
                if (e != null)
                {
                    System.out.println("Failure while registering: " + e.toString());
                    if (e.getCause() != null)
                    {
                        System.out.println("Inner exception: " + e.getCause().toString());
                    }
                }
            })
            .thenAccept((unused) ->
            {
                System.out.println("Press enter to stop.");
                try 
                {
                    System.in.read();
                }
                catch (Exception e)
                {
                    System.out.println("Keyboard read failed: " + e.toString());
                }
            })
            .thenCompose((unused) ->
            {
                return host.unregisterEventProcessor();
            })
            .exceptionally((e) ->
            {
                System.out.println("Failure while unregistering: " + e.toString());
                if (e.getCause() != null)
                {
                    System.out.println("Inner exception: " + e.getCause().toString());
                }
                return null;
            })
            .get(); // Wait for everything to finish before exiting main!
    
            System.out.println("End of sample");
        }
    
  3. 次のコードを使用して、EventProcessor という名前のクラスをもう 1 つ作成します。Create one more class called EventProcessor, using the following code:

    public static class EventProcessor implements IEventProcessor
    {
        private int checkpointBatchingCount = 0;
    
        // OnOpen is called when a new event processor instance is created by the host. 
        @Override
        public void onOpen(PartitionContext context) throws Exception
        {
            System.out.println("SAMPLE: Partition " + context.getPartitionId() + " is opening");
        }
    
        // OnClose is called when an event processor instance is being shut down. 
        @Override
        public void onClose(PartitionContext context, CloseReason reason) throws Exception
        {
            System.out.println("SAMPLE: Partition " + context.getPartitionId() + " is closing for reason " + reason.toString());
        }
    
        // onError is called when an error occurs in EventProcessorHost code that is tied to this partition, such as a receiver failure.
        @Override
        public void onError(PartitionContext context, Throwable error)
        {
            System.out.println("SAMPLE: Partition " + context.getPartitionId() + " onError: " + error.toString());
        }
    
        // onEvents is called when events are received on this partition of the Event Hub. 
        @Override
        public void onEvents(PartitionContext context, Iterable<EventData> events) throws Exception
        {
            System.out.println("SAMPLE: Partition " + context.getPartitionId() + " got event batch");
            int eventCount = 0;
            for (EventData data : events)
            {
                try
                {
                    System.out.println("SAMPLE (" + context.getPartitionId() + "," + data.getSystemProperties().getOffset() + "," +
                            data.getSystemProperties().getSequenceNumber() + "): " + new String(data.getBytes(), "UTF8"));
                    eventCount++;
    
                    // Checkpointing persists the current position in the event stream for this partition and means that the next
                    // time any host opens an event processor on this event hub+consumer group+partition combination, it will start
                    // receiving at the event after this one. 
                    this.checkpointBatchingCount++;
                    if ((checkpointBatchingCount % 5) == 0)
                    {
                        System.out.println("SAMPLE: Partition " + context.getPartitionId() + " checkpointing at " +
                            data.getSystemProperties().getOffset() + "," + data.getSystemProperties().getSequenceNumber());
                        // Checkpoints are created asynchronously. It is important to wait for the result of checkpointing
                        // before exiting onEvents or before creating the next checkpoint, to detect errors and to ensure proper ordering.
                        context.checkpoint(data).get();
                    }
                }
                catch (Exception e)
                {
                    System.out.println("Processing failed for an event: " + e.toString());
                }
            }
            System.out.println("SAMPLE: Partition " + context.getPartitionId() + " batch size was " + eventCount + " for host " + context.getOwner());
        }
    }
    

このチュートリアルでは、EventProcessorHost の単一のインスタンスを使用します。This tutorial uses a single instance of EventProcessorHost. スループットを向上させるには、EventProcessorHost の複数のインスタンスを (なるべく別のコンピューターで) 実行することをお勧めします。To increase throughput, we recommend that you run multiple instances of EventProcessorHost, preferably on separate machines. これにより、冗長性も提供されます。It provides redundancy as well. このような場合、受信したイベントの負荷を分散するために、さまざまなインスタンスが自動的に連携します。In those cases, the various instances automatically coordinate with each other in order to load balance the received events. 複数の受信側でぞれぞれ すべて のイベントを処理する場合、 ConsumerGroup 概念を使用する必要があります。If you want multiple receivers to each process all the events, you must use the ConsumerGroup concept. さまざまなコンピューターからイベントを受信する場合、デプロイしたコンピューター (またはロール) に基づいて EventProcessorHost インスタンスの名前を指定するのに便利です。When receiving events from different machines, it might be useful to specify names for EventProcessorHost instances based on the machines (or roles) in which they are deployed.

メッセージを EventHub に発行するPublishing Messages to EventHub

コンシューマーがメッセージを取得するためには、あらかじめパブリッシャーがそのメッセージをパーティションに発行する必要があります。Before messages are retrieved by consumers, they have to be published to the partitions first by the publishers. com.microsoft.azure.eventhubs.EventHubClient オブジェクトの sendSync() メソッドを使ってイベント ハブに同期的にメッセージを発行するとき、パーティション キーが指定されているかどうかに応じて、そのメッセージは特定のパーティションに送信されるか、または利用可能なすべてのパーティションにラウンド ロビン方式で分散されることに注目してください。It is worth noting that when messages are published to event hub synchronously using the sendSync() method on the com.microsoft.azure.eventhubs.EventHubClient object, the message could be sent to a specific partition or distributed to all available partitions in a round-robin manner depending on whether the partition key is specified or not.

パーティション キーを表す文字列が指定されている場合、そのキーをハッシュすることによって、イベントの送信先となるパーティションが決定されます。When a string representing the partition key is specified, the key is hashed to determine which partition to send the event to.

パーティション キーが設定されていない場合は、利用可能なすべてのパーティションに対してラウンド ロビン式にメッセージが分散されますWhen the partition key is not set, then messages are round-robined to all available partitions

// Serialize the event into bytes
byte[] payloadBytes = gson.toJson(messagePayload).getBytes(Charset.defaultCharset());

// Use the bytes to construct an {@link EventData} object
EventData sendEvent = EventData.create(payloadBytes);

// Transmits the event to event hub without a partition key
// If a partition key is not set, then we will round-robin to all topic partitions
eventHubClient.sendSync(sendEvent);

//  the partitionKey will be hash'ed to determine the partitionId to send the eventData to.
eventHubClient.sendSync(sendEvent, partitionKey);

EventProcessorHost (EPH) 用のカスタム CheckpointManager を実装するImplementing a Custom CheckpointManager for EventProcessorHost (EPH)

この API には、既定のチェックポイント マネージャーでは実際のユース ケースに対応できない場合を想定し、カスタム チェックポイント マネージャーを実装するメカニズムが用意されています。The API provides a mechanism to implement your custom checkpoint manager for scenarios where the default implementation is not compatible with your use case.

既定のチェックポイント マネージャーには、Blob Storage が使用されます。しかし、EPH で使用されているチェックポイント マネージャーを独自の実装でオーバーライドすれば、その独自実装の基盤として任意のストアを使用することができます。The default checkpoint manager uses blob storage but if you override the checkpoint manager used by EPH with your own implementation, you can use any store you want to back your checkpoint manager implementation.

インターフェイス com.microsoft.azure.eventprocessorhost.ICheckpointManager を実装するクラスを作成しますCreate a class that implements the interface com.microsoft.azure.eventprocessorhost.ICheckpointManager

チェックポイント マネージャー (com.microsoft.azure.eventprocessorhost.ICheckpointManager) のカスタム実装を使用します。Use your custom implementation of the checkpoint manager (com.microsoft.azure.eventprocessorhost.ICheckpointManager)

既定のチェックポイントのメカニズムを実装内でオーバーライドし、独自のデータ ストア (SQL Server、CosmosDB、Azure Cache for Redis など) に基づいて独自のチェックポイントを実装できます。Within your implementation, you can override the default checkpointing mechanism and implement our own checkpoints based on your own data store (like SQL Server, CosmosDB, and Azure Cache for Redis). チェックポイント マネージャーの実装の基盤として使用するストアには、コンシューマー グループのイベントを処理するすべての EPH インスタンスからアクセスできるストアを使用することをお勧めします。We recommend that the store used to back your checkpoint manager implementation is accessible to all EPH instances that are processing events for the consumer group.

環境内で利用できるどのデータストアでも使用できます。You can use any datastore that is available in your environment.

com.microsoft.azure.eventprocessorhost.EventProcessorHost クラスには、EventProcessorHost のチェックポイント マネージャーをオーバーライドする際に使用できる 2 つのコンストラクターがあります。The com.microsoft.azure.eventprocessorhost.EventProcessorHost class provides you with two constructors that allow you to override the checkpoint manager for your EventProcessorHost.

次のステップNext steps

次の記事を参照してください。Read the following articles: