Dubbo泛化调用
本文记录下利用dubbo泛化调用实现网关server收http请求,然后转发给dubbo服务,然后收到dubbo响应的功能原理。
关键点1:dubbo泛化调用。可根据(注册中心地址、接口名,方法名,参数类型)唯一确定一个dubbo服务。
关键点2:springboot events。客户端dubbo服务启动后会发送ServiceBeanExportedEvent事件。
所以我们的网关server要实现收http发dubbo思路就很清楚了:我们为使用dubbo的后端服务提供一个注解@MyGateWayMapping(“/mapPath”),然后再写一个继承Springboot applicationEvent类,然后这个派生类负责在dubbo启动后把(dubbo注册中心地址,dubbo服务接口名,方法名,参数类型,@MyGateWayMapping中记录的映射路径)注册到网关,这样就实现了dubbo服务一起动,我们的网关就能收到注册信息,这样http请求@MyGateWayMapping中指定的路径(这里是/mapPath)的时候我们就知道要转发给后端哪个dubbo服务,既然知道了所有信息(dubbo注册中心地址,dubbo服务接口名,方法名,参数类型)我们就可以通过dubbo泛化调用实现远程调用后端dubbo服务了。我们从http中取出参数,然后传递给genericService就行了。补充说明一下:genericService使用的参数是map,也就是我们把参数包装成map后,传给genericService,这样dubbo后端服务收到请求的时候,dubbo框架会自动帮我们把map转成对应的结构体。genericService.$invokeAsync会返回一个Object对象,实际也是个map,我们返回响应给httpClient的时候只需要把这个map对象序列化成Json对象后直接作为http响应返回即可,客户端自己去解析,因为网关只是一个转发功能。
demo:略,公司最近不允许上传代码