大家好,又见面了,我是你们的朋友全栈君。
官方的解决方案是主从集群(备份)方案 zookeeper集群 Replicated(瑞pk得) levelDB就是之前在讲消息持久化kahaDB的另一种消息持久化方案,这种方案的性能会比较好 activemq集群
activemq最起码有三个,因为一个activemq挂了之后可以在另外两个中选取,如果只有两个的话挂了一个就只剩下一个没法选取了,三台activemq只有一台是master,所以只有一台在生效,其他客户端只会连接master,其他两台只起到一个备份的作用,如果master宕机了,那么zookeeper会从剩下的两台activemq中通过选取机制选取出一台成为master
zookeeper集群默认端口是2181,如果在同一台机器上要建立3个zookeeper那么需要改端口,activemqweb端口和tcp协议端口同理
用了集群之后,使用的时候连接地址需要改故障迁移连接方式,加上failover的前缀
解决消费方幂等性的问题:
产生:当生产方和消费方有可能因为一个网络延迟等原因,MQ服务器无法即使接收到消费方应答,导致MQ重试,在重试过程中造成重复消费问题。
解决思路:
(也可以这么说是消息头中有个可以自己设置的id,自己可以在消费方通过代码判断这个id是否取到过,若有则不取)
以下手段可以防止消息丢失:
这些前面都有讲,现在再做一下整理
死信队列是MQ产品在处理失败或者过期的情况下来保证消息不会丢失的机制,
重发失败6次的时候,当然这个可以设置,重发时间也可以设置 MQ在遇到事务开启手动调用rollback 开启事务但是没有commit 未开启事务,手动确认调用了一个session.recover方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125570.html原文链接:https://javaforall.cn