下面是我用來向 SNS 發布訊息的程式。當我在本地系統中執行這個程式(簡單的 Java 或 Spring boot)時沒有問題。訊息發布在主題上。
但是,實際程式在 Spring Boot 專案的執行緒內運行。該執行緒每 1 分鐘運行一次。每當執行緒運行時,下面的程式都必須發布訊息。這個 Spring Boot 專案部署在一個獨立的 Unix 服務器中。從服務器,它不發布訊息。也不例外。日志顯示與 Amazon 網路的成功握手。
我也嘗試了 AmazonSNS 和 SnsClient 類。
AmazonSNSAsync snsClient1 = AmazonSNSAsyncClient.asyncBuilder()
.withCredentials(new AWSStaticCredentialsProvider(
new BasicAWSCredentials("access-key",
"secret-key")))
.withRegion("us-east-1")
.build();
log.info("STATUS: snsClient1 formed");
PublishRequest publishReq =
new PublishRequest()
.withTopicArn("sns_topic-arn")
.withMessage("mes: " message);
log.info("STATUS: publishReq formed");
snsClient1.publishAsync(publishReq);
我已經嘗試了以下事情。
- 將程式移出執行緒
- 嘗試了一個新主題
- 使用了 SNS 的最新依賴
但是,當我使用 AWS CLI 從 Unix 框發布訊息時,該訊息已成功發布。
有沒有人遇到過類似的問題?如果沒有,您可以分享任何從 Java 程式訪問 SNS 的替代方法(如果您知道的話)。
uj5u.com熱心網友回復:
該問題已部分修復。AWS SDK 引發了錯誤,而不是例外。這就是代碼塊的原因。有一次,我用“Throwable”關鍵字捕捉到,程式沒有停止。
后來,我使用 bom 概念來避免傳遞依賴版本沖突,并將所有 AWS SDK 1 代碼轉換為 SDK 2 代碼。現在,該訊息發布在 SNS 主題上。但是,奇怪的是 SDK2 也拋出了類似的錯誤。我正在嘗試修復它。
參考:
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html https://github.com/awsdocs/aws-doc-sdk-examples/blob/main /javav2/example_code/sns/src/main/java/com/example/sns/PublishTopic.java
同時,您也可以在下面的頁面上跟蹤問題。
https://github.com/aws/aws-sdk-java/discussions/2867
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517842.html
