如何解决AWS SQS-一段时间后MessageConsumer停止接收消息
我的应用程序将侦听器注册到SQS队列(队列本身由SNS主题填充)。 当我启动应用程序时,消息使用者正在按预期方式工作,但过一会儿它停止接收任何消息。一段时间后消费者会关机吗?
建议或评论将不胜感激。
SQSConnection:
@Bean
public SQSConnection amazonSQSConnection(
@Value("${aws.access.key}") String accessKey,@Value("${aws.secret.key}") String secretKey) throws JMSException {
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(accessKey,secretKey);
AmazonSQSClientBuilder client = AmazonSQSClientBuilder
.standard()
.withRegion(Regions.GovCloud)
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials));
SQSConnectionFactory connectionFactory = new SQSConnectionFactory(new ProviderConfiguration(),client);
return connectionFactory.createConnection();
}
消费者:
@Bean
public MessageConsumer workOrderChangeConsumer(
SQSConnection connection,WorkOrderKittingService workOrderKittingService,AuthenticationProvider authProvider,@Value("${app.user.name}") String appUserName,@Value("${aws.sqs.workorder.change.queue}") String woChangeQueue) throws JMSException {
Session session = connection.createSession(false,Session.CLIENT_ACKNOWLEDGE);
Queue queue = session.createQueue(woChangeQueue);
WorkOrderChangeIngestor workOrderChangeIngestor = new WorkOrderChangeIngestor(
workOrderKittingService,authProvider,appUserName);
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(workOrderChangeIngestor);
connection.start();
return consumer;
}
解决方法
您正在尝试自己管理连接生命周期。
我建议您使用spring-cloud-aws让spring由您自己管理
https://docs.spring.io/spring-cloud-aws/docs/2.2.3.RELEASE/reference/html/#receiving-a-message
您可以通过注释创建侦听器:
@Component
public class MyMessageHandler {
@SqsListener("queueName")
void handle(String message) {
...
throw new MyException("something went wrong");
}
@MessageExceptionHandler(MyException.class)
void handleException(MyException e) {
...
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。