Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

再接続ロジックを使用して Neptune DB インスタンスに接続する Java の例

フォーカスモード
再接続ロジックを使用して Neptune DB インスタンスに接続する Java の例 - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

次の Java の例は、再接続ロジックを使用して Gremlin クライアントに接続して、予期しない切断から回復する方法を示しています。

これには、以下の依存関係があります。

<dependency> <groupId>org.apache.tinkerpop</groupId> <artifactId>gremlin-driver</artifactId> <version>${gremlin.version}</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>amazon-neptune-sigv4-signer</artifactId> <version>${sig4.signer.version}</version> </dependency> <dependency> <groupId>com.evanlennick</groupId> <artifactId>retry4j</artifactId> <version>0.15.0</version> </dependency>

サンプルコードは次のとおりです。

重要

Retry4J からの CallExecutor はスレッドセーフではないことがあります。各スレッドで独自のCallExecutorインスタンスを使用するか、別の再試行ライブラリを使用することを検討してください。

注記

次の例は、requestInterceptor() の使用を含むように更新されました。これは TinkerPop 3.6.6 で追加されました。TinkerPop バージョン 3.6.6 以前は、コード例では handshakeInterceptor() が使用されていましたが、このリリースでは非推奨でした。

public static void main(String args[]) { boolean useIam = true; // Create Gremlin cluster and traversal source Cluster.Builder builder = Cluster.build() .addContactPoint(System.getenv("neptuneEndpoint")) .port(Integer.parseInt(System.getenv("neptunePort"))) .enableSsl(true) .minConnectionPoolSize(1) .maxConnectionPoolSize(1) .serializer(Serializers.GRAPHBINARY_V1D0) .reconnectInterval(2000); if (useIam) { builder.requestInterceptor( r -> { try { NeptuneNettyHttpSigV4Signer sigV4Signer = new NeptuneNettyHttpSigV4Signer("(your region)", new DefaultAWSCredentialsProviderChain()); sigV4Signer.signRequest(r); } catch (NeptuneSigV4SignerException e) { throw new RuntimeException("Exception occurred while signing the request", e); } return r; }); } Cluster cluster = builder.create(); GraphTraversalSource g = AnonymousTraversalSource .traversal() .withRemote(DriverRemoteConnection.using(cluster)); // Configure retries RetryConfig retryConfig = new RetryConfigBuilder() .retryOnCustomExceptionLogic(getRetryLogic()) .withDelayBetweenTries(1000, ChronoUnit.MILLIS) .withMaxNumberOfTries(5) .withFixedBackoff() .build(); @SuppressWarnings("unchecked") CallExecutor<Object> retryExecutor = new CallExecutorBuilder<Object>() .config(retryConfig) .build(); // Do lots of queries for (int i = 0; i < 100; i++){ String id = String.valueOf(i); @SuppressWarnings("unchecked") Callable<Object> query = () -> g.V(id) .fold() .coalesce( unfold(), addV("Person").property(T.id, id)) .id().next(); // Retry query // If there are connection failures, the Java Gremlin client will automatically // attempt to reconnect in the background, so all we have to do is wait and retry. Status<Object> status = retryExecutor.execute(query); System.out.println(status.getResult().toString()); } cluster.close(); } private static Function<Exception, Boolean> getRetryLogic() { return e -> { Class<? extends Exception> exceptionClass = e.getClass(); StringWriter stringWriter = new StringWriter(); String message = stringWriter.toString(); if (RemoteConnectionException.class.isAssignableFrom(exceptionClass)){ System.out.println("Retrying because RemoteConnectionException"); return true; } // Check for connection issues if (message.contains("Timed out while waiting for an available host") || message.contains("Timed-out") && message.contains("waiting for connection on Host") || message.contains("Connection to server is no longer active") || message.contains("Connection reset by peer") || message.contains("SSLEngine closed already") || message.contains("Pool is shutdown") || message.contains("ExtendedClosedChannelException") || message.contains("Broken pipe") || message.contains(System.getenv("neptuneEndpoint"))) { System.out.println("Retrying because connection issue"); return true; }; // Concurrent writes can sometimes trigger a ConcurrentModificationException. // In these circumstances you may want to backoff and retry. if (message.contains("ConcurrentModificationException")) { System.out.println("Retrying because ConcurrentModificationException"); return true; } // If the primary fails over to a new instance, existing connections to the old primary will // throw a ReadOnlyViolationException. You may want to back and retry. if (message.contains("ReadOnlyViolationException")) { System.out.println("Retrying because ReadOnlyViolationException"); return true; } System.out.println("Not a retriable error"); return false; }; }
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.