我有一个问题:我的服务基于Spring Boot,我想从AWS SQS获取消息并将这些消息保存在Redis上。
这是我的听众:
@SqsListener(value = "${amazon.sqs.destination}", deletionPolicy = SqsMessageDeletionPolicy.NEVER)
public void receive(String requestJSON, Acknowledgment acknowledgment) throws IOException, AmazonSQSException {
try (Jedis jedis = jedisPool.getResource()) {
if (redisPassword != null && !redisPassword.isEmpty()) {
jedis.auth(redisPassword);
}
long key = jedis.incr("Trace:");
Trace trace = Trace.fromJSON(requestJSON);
trace.setTechnicalId(Long.toString(key));
traceRepository.save(trace);
acknowledgment.acknowledge();
}catch (Exception e) {
throw new IOException(e.getMessage());
}
}
我有AWS SQS队列A和死信队列B。 如果将JSON解析为对象时出现问题,则此消息应保存在死信队列中。现在可以正常工作了。 我应该拥有的是例如Redis死了->行
try (Jedis jedis = jedisPool.getResource()) {
引发错误 我不想将我的消息从队列A中删除,而移到死信队列B中,但是我希望我的消息仍在队列A中,直到Redis再次工作。
该怎么做?
如何区分这两种情况(解析错误和redis问题)并处理不同的方法(将消息移至死信队列并还原该消息并使它再次可见)?在此先感谢您 马特乌斯