SQS消息确认
我的Sring Boot应用程序侦听Amazon SQS队列。现在,我需要实现正确的消息确认-
我需要接收一条消息,只有在成功后才需要确认消息(从队列中删除消息),然后再执行一些业务逻辑。例如,如果我的业务逻辑出错,则必须重新排队该消息。
这是我的SQS配置:
/** * AWS Credentials Bean
*/
@Bean
public AWSCredentials awsCredentials() {
return new BasicAWSCredentials(accessKey, secretAccessKey);
}
/**
* AWS Client Bean
*/
@Bean
public AmazonSQS amazonSQSAsyncClient() {
AmazonSQS sqsClient = new AmazonSQSClient(awsCredentials());
sqsClient.setRegion(Region.getRegion(Regions.US_EAST_1));
return sqsClient;
}
/**
* AWS Connection Factory
*/
@Bean
public SQSConnectionFactory connectionFactory() {
SQSConnectionFactory.Builder factoryBuilder = new SQSConnectionFactory.Builder(
Region.getRegion(Regions.US_EAST_1));
factoryBuilder.setAwsCredentialsProvider(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return awsCredentials();
}
@Override
public void refresh() {
}
});
return factoryBuilder.build();
}
/**
* Registering QueueListener for queueName
*/
@Bean
public DefaultMessageListenerContainer defaultMessageListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer.setConnectionFactory(connectionFactory());
messageListenerContainer.setMessageListener(new MessageListenerAdapter(new MyQueueListener()));
messageListenerContainer.setDestinationName(queueName);
return messageListenerContainer;
}
我的队列侦听器:
public class MyQueueListener { public void handleMessage(String messageContent) throws JMSException {
//do some job
//TODO: ack the message
}
}
现在,我不知道如何确认来自听众的消息。
回答:
通常DefaultMessageListenerContainer
在handleMessage
自动执行之前或之后确认消息。因此,您无需执行任何操作。
但推荐的方法DefaultMessageListenerContainer
是使用事务而不是客户端ack模式。不知道Amazon SQS是否具有此类选项。
以上是 SQS消息确认 的全部内容, 来源链接: utcz.com/qa/427875.html