繁体   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