littlersmall / rabbitmq-access

rabbitmq手动确认模式java封装

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

发送Return回调

it-noob opened this issue · comments

作者您好,我看构造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进行简单封装

setReturnCallback 这个是第一版留下的。目前所有的发送正确性保证依靠RetryCache实现。
宕机丢数据还是要根据业务评估,完美的解决方案一定是非常复杂的。

恩,您说的在理。只是,目前为止,有什么比直接扔到内存中的map中更稳妥一些的思路么?

redis