我的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
handleMessage
但推荐的方法DefaultMessageListenerContainer是使用事务而不是客户端ack模式。不知道Amazon SQS是否具有此类选项。