【问题标题】:spring cloud AWS SQS Listener Issue春季云AWS SQS侦听器问题
【发布时间】:2017-06-13 01:39:54
【问题描述】:

我正在准备从 Amazon SQS 监听的演示程序。下面是我的代码。

xml 配置

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

UserServiceListenr.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}

如果有任何线索,会出现什么问题?

【问题讨论】:

    标签: java spring-cloud amazon-sqs spring-cloud-aws


    【解决方案1】:

    我遇到了类似的问题,并且能够解决它。文档在这个问题上并不清楚。我在这里添加它以防以后有人看到。

    首先,当您将项目插入队列时,您需要设置一些额外的消息属性,以便 Spring 知道将其编组到您的 bean 中。如果在将消息添加到队列时在 GUI 中设置 Name: contentType Type: String Value: application/json,那么 spring 将尝试使用 Jackson 编组它。

    其次,我无法让@SqsListener 使用非字符串参数,除非它位于使用@Controller 注释的类中。对于非控制器类,我必须添加第二个方法参数(@Header("SenderId") String senderId 为我工作)然后正确路由

    【讨论】:

      【解决方案2】:

      当您看到该消息移动到 Messages_in_flight 列时 - 这意味着该消息已被消费者接收,但对于此特定消息的成功处理确认仍未收到。

      所以原因可能是下一个: 1) 在处理来自 SQS 的消息期间出现错误/异常 2) Spring 找不到合适的 ArgumentResolver 将收入消息从 SQS 转换为您的 bean。我看到你正在使用你的自定义 bean - 'Message'

      您可以查看documentation,第 5.2.5 节

      【讨论】:

        猜你喜欢
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-07
        相关资源
        最近更新 更多