我正在准备演示程序,听亚马逊的SQS.Below是我的代码。
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 queue.when上放置了2条消息,我尝试使用这个演示程序获取消息,Messages_in_flight列显示在我的sqsListener方法中,几分钟后消息显示在sqsListener控制台中的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}如果有线索的话有什么问题吗?
发布于 2017-03-14 22:05:00
当您看到该消息移动到列Messages_in_flight时--这意味着该消息已被消费者接收,但对于该特定消息的成功处理的确认仍未收到。
因此,原因可能是: 1)在处理来自SQS的消息时出现错误/异常,2) Spring找不到合适的ArgumentResolver将收入消息从SQS转换为bean。我看到你在使用你的自定义bean --“消息”
您可以查看文档,第5.2.5节
发布于 2020-04-29 18:58:19
我有一个类似的问题,并能够解决它。医生们对这件事不清楚。我把它加在这里,以防有人以后看到这个。
首先,当您将一个项插入队列中时,您需要设置一些附加的消息属性,以便Spring知道将其放入bean中。如果您在GUI中设置名称: contentType类型: String : application/json时添加消息到队列中,那么spring将尝试使用Jackson对其进行传递。
其次,我无法让@SqsListener使用非字符串参数,除非它在一个带有@Controller注释的类中。对于非控制器类,我必须添加第二个方法参数(@Header("SenderId") String senderId为我工作),然后它正确地路由。
https://stackoverflow.com/questions/41892860
复制相似问题