day57_java_基础巩固

简介: 自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!

消息重复消费如何解决?

影响消息正常发送和消费的重要原因是网络的不确定性。


出现原因

正常情况下在 consumer 真正消费完消息后应该发送 ack,通知 broker 该消息已正常

消费,从 queue 中剔除

当 ack 因为网络原因无法发送到 broker,broker 会认为词条消息没有被消费,此后会

开启消息重投机制把消息再次投递到 consumer。

消费模式:在 CLUSTERING 模式下,消息在 broker 中会保证相同 group 的 consumer 消

费一次,但是针对不同 group 的 consumer 会推送多次


解决方案

数据库表:处理消息前,使用消息主键在表中带有约束的字段中 insert

Map:单机时可以使用 map 做限制,消费时查询当前消息 id 是不是已经存在

Redis:使用分布式锁。

线上业务用消息中间件的时候,是否需要保证消息的顺序性?

如果不需要保证消息顺序,为什么不需要?假如我有一个场景要保证消息的顺序,你们

应该如何保证?

首先多个 queue 只能保证单个 queue 里的顺序,queue 是典型的 FIFO,天然顺序。

多个 queue 同时消费是无法绝对保证消息的有序性的。所以总结如下:

同一 topic,同一个 QUEUE,发消息的时候一个线程去发送消息,消费的时候 一个线

程去消费一个 queue 里的消息。


追问:怎么保证消息发到同一个 queue?

Rocket MQ 给我们提供了 MessageQueueSelector 接口,可以自己重写里面的接口,

实现自己的算法,举个最简单的例子:判断 i % 2 == 0,那就都放到 queue1 里,否则放

到 queue2 里。

相关文章
|
Java
java基础-第2章-java基础语法(二)
先判断循环条件,如果满足,就执行里面的循环体;然后再来判断条件是否依然成立,如果成立继续执行,否则结束了循环。
39 0
|
3月前
|
网络协议 Java 网络性能优化
Java基础杂文
这段内容介绍了HTTPS无法解决的问题,包括网络延迟、数据包大小、并发请求限制和性能影响。接着解释了双亲委派模型,这是一种类加载机制,通过将加载请求逐级向上委托给父类加载器来完成。最后,详细对比了TCP和UDP两种传输层协议的区别,以及`select`的原理及其缺点,如频繁的用户态与内核态间的数据拷贝和遍历操作带来的性能损耗。
Java基础杂文
|
7月前
|
Java 编译器
java基础
【4月更文挑战第5天】java基础
52 2
|
7月前
|
Java
JAVA基础小记
JAVA基础小记
26 0
|
NoSQL Java 数据库连接
day40_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
存储 NoSQL MongoDB
day60_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
负载均衡 算法 Java
day44_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
Java 数据库连接 Spring
day42_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
消息中间件 存储 RocketMQ
day59_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!
|
存储 缓存 NoSQL
day50_java_基础巩固
自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!!!虽然有些干货知识很通俗,但也是自己的必经之路i,加油!!!