面试官问我mq可以做什么?我说RPC服务。面试官一脸疑问&&嫌弃,让我回去等通知。
MQ与RPC
RPC(远程过程调用),客户端通过网络请求远程服务器服务,本质就是是两个进程间的通信。MQ作为一个消息中间件,在生产端与消费端传递消息,其实也是一种RPC调用。
RabbitMq RPC
当然了我说mq可用于rpc是当初学习rabbitMq时接触到的,rabbitMq官网有一个示例就是利用消息推送完成远程调用。我对rpc的进一步了解就是从这个示例开始的,链接地址:rabbitmq-rpc
1.使用一个消息队列完成rpc请求,为了能够使request,response一对一,生成了请求唯一的关联id:correlationId。
2.客户端调用服务端时应该设置超时时间。
3.当服务端产生异常时,是否应该将异常返回客户端。
4.在处理前防止无效的传入消息。
5.如果服务端没有启动,客户端如何处理。
6.等待响应使用同步还是异步。
貌似和dubbo没什么区别,使用dubbo的两端都可以称之为客户端,dubbo常见的使用zk为注册中心,然后两端就可以进行通信,调用服务。
再谈下我对MQ的理解
1.mq作为消息中间件,首先可以使多应用端解耦。应用只需和mq通信,各应用开发语言也不受限制。当然了不是说解耦了就一定好,脱离了实际业务场景谈架构应用都是扯犊子。
2.mq高性能支撑,缓冲作用。现在的mq性能都比较好,用来抵挡高峰值流量最合适不过了,消息接收的一端可以无脑接收,而应用可以在接收一端慢慢消费,起到削峰的作用。
3.冗余保存,ack机制。mq消息队列的持久化,上游系统可以直接推送mq数据即使下游系统崩溃,下游系统消息消费成功时才会删除消息,可以确保数据不丢失。
4.异步通信。一些耗时的操作或响应及时性要求不高的操作,可以使用队列异步处理。
5.统一日志收集。