如何强制AmazonSQSBufferedAsyncClient刷新邮件?

Dae*_*yth 7 java amazon-sqs amazon-web-services

我正在使用AWS SDK for Java,我正在使用缓冲异步sqs客户端来批量请求,这样我就可以降低成本.

当我的应用程序关闭时,我想确保缓冲区中没有消息等待,但是.flush()我无法在客户端上看到任何方法.

是否AmazonSQSBufferedAsyncClient.shutdown()调用时刷新我的邮件?我查看了源代码,目前还不清楚.该方法调用它拥有的shutdown()每一个QueueBuffer,但在QueueBuffer.shutdown()其中说

public void shutdown() {
  //send buffer does not require shutdown, only
  //shut down receive buffer
  receiveBuffer.shutdown();
}
Run Code Online (Sandbox Code Playgroud)

此外,文档.shutdown()说:

关闭此客户端对象,释放可能保持打开的所有资源.这是一个可选方法,并且不希望调用者调用它,但是如果他们想要显式释放任何打开的资源.客户端关闭后,不应再用它来发出更多请求.

对于这个应用程序,我需要确保在缓冲时没有消息丢失.我是否需要使用普通AmazonSQSClient而不是缓冲/异步手动处理?

Ale*_*yak 3

在 1.11.37 版本的 SDK 中,有一个专门用于此目的的配置参数QueueBufferConfig

AmazonSQSBufferedAsyncClient bufClient =
    new AmazonSQSBufferedAsyncClient(
        realAsyncClient,
        new QueueBufferConfig( )
            .withFlushOnShutdown(true)
    );
Run Code Online (Sandbox Code Playgroud)