JMS MQ,ActiveMQ,inforsuiteMQ解决消息丢失和重复消费问题

一、生产者数据丢失问题解决方案

1.事务机制:能解决问题

	缺点:吞吐量低,耗费性能

2.confrim消息持久化

	producer.setDeliveryMode(DeliveryMode.PERSISTENT)

二、消费者数据丢失和重复消费问题解决方案(可行方案1、2、4)

1.事务机制

	connection.createSession(true,Session.SESSION_TRANSACTED)

2.手动提交

每个message都有一个唯一的id,在入库的时间该id可以作为唯一主键,解决消息重复消费的问题。通过手动提交可以解决消息丢失的问题。

	connection.createSession(false,Session.CLIENT_ACKNOWLEDGE)
		
	for(int i=0;i>messageNumber;i++){
			Message message = consumer.receiver();
			String id = message.getJMSMessageID();//入库时,id作为唯一主键
			//业务逻辑
			message.acknowledge();//提交消息
		}

3.AUTO_ACKNOWLEDGE模式,会产生数据丢失问题

	Message message = consumer.receiver();
	String id = message.getJMSMessageID();

当receiver()返回成功后,表示该消息处理完成,如果在后续处理中产生异常,可能造成消息丢失。

4.监听器

该过程是一个持续监听的过程,有消息就处理,没消息就关闭。处理过程中产生JMSException异常,会重复该过程7次,如果7次后还有异常,则直接跳过该消息,去处理下一条消息。
如果该过程中突然中断,消息不会丢失,下次开启时会进行消息。

	Consumer.setMessageListener(message->{
	String id = message.getJMSMessageID();
	//业务逻辑
	});

监听器可以解决突然中断导致消息丢失的问题,但如果处理过程中报错,则可能会丢失数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值