发送Return回调
it-noob opened this issue · comments
大水牛 commented
作者您好,我看构造sender的时候,returnCallback的代码
rabbitTemplate.setReturnCallback(new ReturnCallback() {
@Override
public void returnedMessage(Message message,
int replyCode,
String replyText,
String exchange,
String routingKey) {
try {
Thread.sleep(Constants.ONE_SECOND);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.error("send message failed: " + replyCode + " " + replyText);
rabbitTemplate.send(message);
}
});
中失败是直接调用send方法,这样做这次消息发送就没有关联操作了吧,只是单纯的发送,增加发送成功率用的,因为RetryCache中的map里还有并未删除,而且这次操作发送成功也不会从map中删除掉这条消息吧。另外一个问题就是,使用map做发送确认机制中的本地缓存看到简书上说到有宕机丢数据的危险,但是引入redis的话,还需要考虑redis的可用性,比如redis的稳定方面要考虑集群等,有点略重;关于缓存您有什么好的建议或者思路么?目前借鉴了你这个项目的思路在对rabbitmq进行简单封装
littlersmall commented
setReturnCallback 这个是第一版留下的。目前所有的发送正确性保证依靠RetryCache实现。
宕机丢数据还是要根据业务评估,完美的解决方案一定是非常复杂的。
大水牛 commented
恩,您说的在理。只是,目前为止,有什么比直接扔到内存中的map中更稳妥一些的思路么?
littlersmall commented
redis