1
与えられた時間に作業中のsqsキューから1つのアイテムを許可しようとしています。現在のところ、キューの1つのメッセージだけを持ち上げますが、ポーリングするたびにそのように見えます。Awsインテグレーションスプリング:sqsから1アイテムのみを保証する
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(10);
executor.setThreadNamePrefix("test-");
executor.initialize();
return executor;
new SqsMessageDrivenChannelAdapter(amazon));
adapter.setMaxNumberOfMessages(1);
adapter.setSendTimeout(2000);
adapter.setVisibilityTimeout(1200);
adapter.setWaitTimeOut(20);
adapter.setTaskExecutor(this.asyncTaskExecutor());
この問題は、ThreadPoolTaskExecutor内で発生していると思われます。キューのサイズが10になると、これが満杯になるまで毎回持ち上がりますか? 1にmaxPoolSizeを設定
は、問題があなたのThreadPoolExecutorがこのキューからメッセージを消費するために2つのスレッドを使用して10のBlockingQueueの大きさに設定されていることである
Caused by: java.util.concurrent.RejectedExecutionException: Task org.springframework.cloud.aws.messaging.[email protected]406354e5 rejected from [email protected][Running, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
at org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(ThreadPoolTaskExecutor.java:293)
... 6 common frames omitted
これは私の最初の考えではこれがうまくいきませんでした。 @Gandalf – user101010101
これを理解するにはもっと多くのコードが必要になるでしょう。 GitHub? – Gandalf