質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.32%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

135閲覧

Spring Boot2.2から3.4へのアップグレードで@SqsListenerの動作不良

hetare_SE

総合スコア30

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2025/03/18 03:06

実現したいこと

Spring Boot2.2でSpring AWS Cloudの@SqsListenerのアノテーションが動作していた。
Spring Boot3.4へバージョンアップした際にも同じようにSQSキューの自動刈り取り処理を実装したい。

①AWSのSQSにキューを投入
②本処理にてキューの内容を取得
③後続処理手続きを終えた後キューの削除

発生している問題・分からないこと

「@SqsListener」の自動刈り取り(ポーリング)が動作していない。
呼びだし先で実行されたか確認するため、logの出力を埋め込んで実行していますが、
そのログが出力されません。SqsListenerの自動実行が行われていないような形です。

エラーメッセージ

error

1SqsListenerが動いていないからか、ログにはエラーが出ていません。

該当のソースコード

java(Configurationクラス1)

1Configurationクラス1 2@Configuration 3public class MyConfiguration1 { 4 @Lazy 5 @Primary 6 @Bean(destroyMethod = "close") 7 public SqsAsyncClient sqsAsyncClient() throws Exception { 8 SqsAsyncClientBuilder builder = SqsAsyncClient.builder(); 9 builder.credentialsProvider(this.awsCredentialsProvider); 10 builder.endpointOverride(URI.create(this.sqsEndPoint)).region(Region.of(region)); 11 SqsAsyncClient sqsAsyncClient = builder.build(); 12 return sqsAsyncClient; 13 } 14 15 @Bean 16 public SqsClient sqsClient() { 17 SqsClientBuilder builder = SqsClient.builder(); 18 builder.credentialsProvider(this.awsCredentialsProvider); 19 builder.endpointOverride(URI.create(this.sqsEndPoint)).region(Region.of(region)); 20 SqsClient sqsClient = builder.build(); 21 return sqsClient; 22 } 23}

java(Configurationクラス2)

1Configurationクラス2 2@Configuration 3@AutoConfigureAfter(value = MyConfiguration1.class) 4public class MyConfiguration2 { 5 @Bean 6 public MessageChannel inputChannel() { 7 return new DirectChannel(); 8 } 9 10 @Bean 11 public MyMessageListenerContainer myMessageListenerContainer(SqsClient sqsClient, MessageChannel inputChannel) { 12 String queueUrl = "queueUrl"; 13 return new myMessageListenerContainer(sqsClient, queueUrl, inputChannel); 14 } 15}

java(メッセージリスナーコンテナ)

1・メッセージリスナーコンテナ 2public class MyMessageListenerContainer { 3 public void run() { 4 ReceiveMessageRequest receiveMessageRequest = ReceiveMessageRequest.builder() 5 .queueUrl(queuUrl) 6 .maxNumberOfMessages(maxNumberOfMessages) 7 .waitTimeSeconds(waitTimeSeconds) 8 .build(); 9 10 ReceiveMessageResponse receiveMessageResponse = 11 sqsClient.receiveMessage(receiveMessageRequest); 12 for (software.amazon.awssdk.services.sqs.model.Message sqsMessage : receiveMessageResponse 13 .messages()) { 14 Message<String> message = MessageBuilder.withPayload(sqsMessage.body()) 15 .setHeader("ReceiptHandle", sqsMessage.receiptHandle()) 16 .build(); 17 18 outputChannel.send(message); 19 20 // メッセージ処理後に削除 21 deleteMessage(sqsMessage.receiptHandle()); 22 } 23 24 } 25 26 private void deleteMessage(String receiptHandle) { 27 DeleteMessageRequest deleteMessageRequest = DeleteMessageRequest.builder() 28 .queueUrl(queuUrl) 29 .receiptHandle(receiptHandle) 30 .build(); 31 sqsClient.deleteMessage(deleteMessageRequest); 32 } 33}

java(リスナー)

1・リスナー 2@Scope(BeanDefinition.SCOPE_PROTOTYPE) 3@Controller 4public class MyController { 5 @SqsListener("queueName") 6 public void doRecieveQueue(MyServiceRequest message){ 7 // 処理 8 } 9}

java設定ファイル(pom)

1・pom.xml 依存関係 2 <dependencies> 3 <dependency> 4 <groupId>io.awspring.cloud</groupId> 5 <artifactId>spring-cloud-aws-starter-sqs</artifactId> 6 </dependency> 7 <dependency> 8 <groupId>io.awspring.cloud</groupId> 9 <artifactId>spring-cloud-aws-autoconfigure</artifactId> 10 </dependency> 11 </dependencies> 12 <dependencyManagement> 13 <dependencies> 14 <dependency> 15 <groupId>io.awspring.cloud</groupId> 16 <artifactId>spring-cloud-aws-dependencies</artifactId> 17 <version>3.3.0</version> 18 <type>pom</type> 19 <scope>import</scope> 20 </dependency> 21 <dependency> 22 <groupId>software.amazon.awssdk</groupId> 23 <artifactId>bom</artifactId> 24 <version>2.27.1</version> 25 <type>pom</type> 26 <scope>import</scope> 27 </dependency> 28 </dependencies> 29 </dependencyManagement>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

teratailで「SqsListener」と検索しましたが、同様の質問がありませんでした。

補足

・バージョン情報
Spring Boot3.4.2
java21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2025/03/18 07:43

Spring Bootを使っていないので具体的なことは言えないのですが、バージョンが大きく変わっている(メジャーバージョンも違う)ので、まずそこで差分が発生していないかを確認してはどうでしょうか?
hetare_SE

2025/03/18 08:14

言葉足らずで申し訳ありません。 バージョンが大きく変わっていることは認識しており、新しいバージョンに寄せて書き直しております。 シンプルにSQSキューから情報を取得するプログラムを書いていますが、 そもそもSQSListenerが動作していないように見受けられるため、何か原因が無いかを探っております。
guest

回答1

0

自己解決

移行前のSpring Boot2.2で動作していた、アノテーションが悪さをしていたことが分かりました。
アノテーションがあることで後続処理が進まずに落ちていたようです。
不要なアノテーションを削除することでSQSListenerが動作するようになりました。

投稿2025/03/18 10:57

hetare_SE

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.32%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問