[英]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.