采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好。自己存在一个疑问Google了很久,没找出合理的解释,这边请教一下您。 问题: 如果现在是高并发的场景下面往rabbitmq的队列中写入数据,会不会出现这么一种情况:前面一个线程在index位置上面写入了数据,因为写入成功,所以return模式返回true,但因为是高并发场景,所以后一个线程有没有可能也是在这个index位置上面写入了数据,然后return返回了true。如果会覆盖的话,数据应该会丢失吧!!
你说的index是指的什么?是插入数据库时的主键?还是mabbitmq里消息的编号?
哦哦,我没说清楚,是队列的位置。比如说现在存在10000个线程同时往exchange中发送了数据,在这种并发的场景下面,exchange会不会把这个消息写在队列的同一个位置上面。
这个不用担心,如果这种并发问题都处理不好,就不能成为优秀的消息中间件了。这种一般来说需要用并发锁,往里写数据的时候临时锁一下,或者使用单线程写。总之是不用担心的。
老师,我确认一下你的回答哈!您的意思是现在10000个线程在同一时刻往Exchange里面发送了数据,Exchange自动会帮我们做好控制,即自动帮我们控制不会在队列的同一个位置上面进行写数据,我们不需要在我们的代码里面通过锁进行控制?还是我们需要在我们的代码里面通过jvm锁或者分布式锁控制同一时刻就一个线程往Exchange里面添加数据?
登录后可查看更多问答,登录/注册
消息驱动架构+订单状态机,二次开发,手写分布式事务框架。
869 11
891 8
754 7
3.1k 7
693 6