.

一种将Dubbo微服务发布为HTTPAP

本文介绍如何基于盘古开发框架将Dubbo微服务发布为API接口供前端调用。

技术实现方案

在盘古开发框架下实现将微服务发布为HTTP接口有两种方式。一种是基于pangu-web模块的接口调用模式;一种是基于ShenYu网关的泛化调用模式pangu-web模块的接口调用模式。

pangu-web模块的接口调用模式

实现原理基于SpringMVC,依赖Servlet容器。Dubbo集成依赖接口JAR,接口调用Dubbo服务。性能复杂度性能高,开发简单,部署运维简单。其它特性支持跨域配置、流量控制、鉴权、熔断、白名单等(配置简单且与盘古开发框架浑然一体)。

ShenYu网关的泛化调用模式

实现原理基于Webflex,依赖Netty框架。Dubbo集成不依赖接口JAR,泛化调用Dubbo服务。性能复杂度网关自身性能较高(Webflex非阻塞模型),但泛化调用性能有损耗(10%~20%)。开发部署运维极其复杂,带来的成本不可小觑。其它特性支持流量控制、鉴权、熔断等(配置复杂)。

上述是从不同维度简单粗暴的以定性的角度给出了一些比较,结论是孤立且脱离项目背景和业务场景的,仅供参考。采用什么样的开发模式不能一概而论,需要综合实际情况酌情选择。但对于大部分盘古开发项目而言,我们推荐整体性价比较高的方案一。当然,如果您的项目背景适合使用ShenYu网关,我们也给出了详细的集成方案。详见:盘古开发框架集成ApacheShenYu网关。

编程实战一:基于SpringMVC开发

此种模式基于SpringMVC通过Controller调用后端Dubbo服务。依赖Servlet容器,需要引入服务接口包。对于HTTP接口层面的鉴权、流控等需求都需要自己用Web拦截器来实现。高可用和性能提升可通过Nginx反向代理后端多个Web节点实现。

安装相关盘古模块

盘古Parent:pangu-parent

基础模块:pangu-spring-boot-starter

Dubbo模块:pangu-dubbo-spring-boot-starter

Web模块:pangu-web-spring-boot-starter

服务接口包:pangu-examples-dubbo-api

本地配置

spring.application.name=pangu-examples-webapi-dubbo-service-basedspring.jackson.time-zone=GMT+8pangu.web.cross-origin=truedubbo.protocol.name=dubbodubbo.protocol.port=-1dubbo.consumer.timeout=dubbo.registry.address=nacos://${nacos.server-addr}?namespace=${nacos.namespace}dubbo.consumer.check=false

调用微服务接口

可以在任何一个SpringBean组件中(针对网关模块而言一般是Controller中),引入服务接口后就像本地接口调用一样调用远程服务。Dubbo将提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。如下所示,通过Cotroller调用远程服务接口,实现将微服务接口发布为WebAPI。

DemoController.java

//注入Dubbo服务接口

Reference(version="1.0.0",group="pangu-examples-dubbo-service")privateUserServiceuserService;/***通过SpringMVC将Duboo微服务接口发布为HTTPAPI*

return*/

RequestMapping("/case1")publicResultListUserOutcase1(){log.info("callcase1...");UserInuserIn=newUserIn().setUserType("1");ListUserOutuserOuts=userService.listUserOuts(userIn);returnResult.success(userOuts);}

启动入口

EnableDubbo

SpringBootApplicationpublicclassDubboProviderApplication{publicstaticvoidmain(String[]args){PanGuApplicationBuilder.init(DubboProviderApplication.class).run(args);}}

编程实战二:基于ShenYu网关开发

盘古开发框架下发布Dubbo服务为HTTP接口的缺省标准姿势已调整为基于pangu-web模块的传统接口调用模式(见上文)。基于ShenYu网关的开发模式已降级为一种可选方案,其文档已迁移到了博客专栏。详见:盘古开发框架集成ApacheShenYu网关。(


转载请注明:http://www.abachildren.com/sszl/3525.html