老师,异步线程同步收发消息,如何理解更好

来源:9-10 利用RabbitMQ实现消息投递削峰填谷(一)

二境志

2021-02-24

在 refreshMessage 方法中,使用了 messageTask.receiveAsync(userId + “”); 异步接收消息的方式,可以避免耽误后面查询未读消息、新消息的语句的执行,而导致等待时间过长。

但是介绍中说道:如果使用异步收发消息,需要创建出一个消费者对象,挂在后台运行不会退出,没对象就处在等待状态,而且如果有 1w人,就会创建 1w对象,负荷比较大,因为异步方式会导致线程不会被回收。所以介绍中说,要使用同步的接发请求方式。但是好像视频中演示代码,全部使用的都是带 Async 的异步方法

重复看了很多次视频和笔记,有点绕晕了。
究竟这句话究竟怎么理解呐,麻烦老师给解一下惑

写回答

1回答

神思者

2021-02-25

这里有两种异步方式:MQ的异步和线程执行的异步。MQ的异步更像是挂载后台阻塞运行,没收到消息也不退出,一直在后端运行。这种方式肯定不妥,所以我们选择的是MQ同步执行,收完消息就退出。线程池方面,我们选择的是异步线程执行MQ的同步接收消息。如果用MQ的异步方式,一直阻塞下去,线程池的线程永远不放回到线程池,线程池很快就被耗光

1
3
____xyz
回复
weixin_慕移动8049143
我也感觉是口误了,我反反复复听了很多遍,感觉逻辑不对
2021-09-20
共3条回复

SpringBoot 在线协同办公小程序开发 全栈式项目实战

未来趋势型业务 + 前后端综合技术栈 + 惊艳的细节打磨

1798 学习 · 1915 问题

查看课程