上家公司,我所在的中台基础服务组,实现了一个叫“事件中心”的微服务,核心功能之一就是使用消息队列作为事件传递和调用。相较于正常的消息传递,这个服务相当于把消息队列包了一层,可以提供比消息队列更多的功能,比如统计,审计等,因为代码是掌握在自己手中,可以做更多的事情。
面试中还有一个比较经典的问题,就是你为什么用 Kafka、RabbitMQ 或 RocketMQ,又或者说你为什么使用某一个中间件,这种问题该怎么回答呢? 答:
- 先大致描述一下各种中间件的优点和缺点,这些基本都是随便搜搜就知道了。
- 然后结合项目中的业务场景特点,说出自己的看法,比如这个中间件用在自己的业务里面会有什么益处,会有什么弊端等等。
- 告诉面试官,自己在技术选型的时候,写了一些demo,在测试环境跑了下,结果如何如何,最后敲定了其中一个。之后,经过技术评审,大家认可了自己的看法,一致通过。
- 选好中间件之后,选择一个业务组进行接入,通过充分测试之后,开始上线试运行,结果大致良好。只是中间出了一些小问题,由此可以引出一些你自己对这个中间件的常见问题的解决思路。比如消息丢失是怎么解决的?消息积压是怎么解决的。
- 最后收尾的时候,如果可能的话,可以升华一下,自己对这个中间件的高维度认知。比如虽然你只是在这个公司用了消息队列来解决削峰解耦的事情,但是其实消息队列还可以用在很多地方。比如本文中提到的分布式事务。