簡體   English   中英

spring cloud AWS SQS 偵聽器問題

[英]spring cloud AWS SQS Listener Issue

我正在准備從 Amazon SQS 收聽的演示程序。下面是我的代碼。

配置文件

<aws-messaging:annotation-driven-queue-listener  amazon-sqs="sqsClient" max-number-of-messages="10" wait-time-out="20" visibility-timeout="100" />

用戶服務監聽器.java

@Configuration
@EnableSqs
@Component
public class UserServiceListenr {
    @SqsListener(value = "CMR", deletionPolicy = SqsMessageDeletionPolicy.ON_SUCCESS)
    public void myQueueListener(Message message) throws Exception{
        try {
            System.out.println("Message Listen start");
            System.out.println("Message part "+message);
        }catch(Exception e){
            System.out.println(" message Exception " + e);
        }
    }
}

我在 SQS 隊列中放置了 2 條消息。當我嘗試使用此演示程序獲取消息時,消息顯示在我的 AWS 控制台中的 Messages_in_flight 列。但消息未到達我的 sqsListener 方法,幾分鍾后消息顯示到 AWS 控制台中的 Messages_available 列。

下面是我運行程序時得到的異常。

QueueMessageHandler:294 - 1 message handler methods found on class com.sophos.cmr.demo.UserServiceListenr: {public void com.sophos.cmr.demo.UserServiceListenr.myQueueListener(java.lang.String) throws java.lang.Exception=org.springframework.cloud.aws.messaging.listener.QueueMessageHandler$MappingInformation@5f0e9815}

那么有什么問題嗎?

當您看到該消息移至 Messages_in_flight 列時 - 這意味着該消息已被消費者接收,但對於此特定消息,仍未收到有關成功處理的確認。

所以原因可能是下一個:1) 在處理來自 SQS 的消息期間出現錯誤/異常 2) Spring 找不到合適的 ArgumentResolver 將收入消息從 SQS 轉換為您的 bean。 我看到您正在使用您的自定義 bean -“消息”

您可以查看文檔,第 5.2.5 節

我有一個類似的問題,並且能夠解決它。 文檔在這個問題上不清楚。 我在這里添加它,以防有人稍后看到它。

首先,當您將一個項目插入隊列時,您需要設置一些額外的消息屬性,以便 Spring 知道將它編組到您的 bean 中。 如果在向隊列添加消息時在 GUI 中設置 Name: contentType Type: String Value: application/json,則 spring 將嘗試使用 Jackson 編組它。

其次,我無法讓@SqsListener使用非 String 參數,除非它在用@Controller注釋的類中。 對於非控制器類,我必須添加第二個方法參數( @Header("SenderId") String senderId為我工作)然后它正確路由

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM