AWS SQS-MessageConsumer在一段时间后停止接收消息



我的应用程序将侦听器注册到SQS队列(队列本身由SNS主题填充(。当我启动应用程序时,消息使用者按预期工作,但过了一段时间它就停止接收任何消息了。可能是消费者过了一段时间就要关门了吗?

建议或意见将不胜感激。

SQS连接:

@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为你管理,通过使用spring cloud aws

https://docs.spring.io/spring-cloud-aws/docs/2.2.3.RELEASE/reference/html/#receiving-a消息

您可以通过注释创建侦听器:

@Component
public class MyMessageHandler {
@SqsListener("queueName")
void handle(String message) {
...
throw new MyException("something went wrong");
}
@MessageExceptionHandler(MyException.class)
void handleException(MyException e) {
...
}
}

最新更新