spring-cloud-huawei:在SpringCloud中使用ServiceComb的能力

点击上方蓝色字体,关注我们

01

【华为全联接大会开源主场】Apache 两大主席来袭 & ServiceComb庖丁解牛微服务

时间:今天下午 13:30 ~ 15:40

Meetup现场:上海 世博中心小型会议厅420+421

线上直播:https://hc2019.bizconf.cn/watch/ko4r1l7j

2019 Session - Apache Software Foundation: Open-Source Development & Innovative Microservices for More Efficient Development

Apache基金会开源开发详解 & 庖丁解牛:微服务创新实践解放开发者  议题详情请戳图

spring-cloud-huawei:在SpringCloud中使用ServiceComb的能力_第1张图片

Apache ServiceComb是什么?

无论是 SOA,还是微服务架构;无论是平台化,还是中台战略,有一条原则始终都没有变过,那就是抽象,将公共的能力抽象出来,将最核心的研发人员投入到公共的服务、框架中,做到最稳定,以此来降低业务服务的复杂度,未来的趋势一定是,平台越来越厚重,业务越来越轻量级。微服务框架ServiceComb就是为此而生,将服务之间的通信、注册发现、服务治理、负载均衡、容错等能力抽象出来,供业务服务使用。

如果要用一句话概括 Apache ServiceComb 的特点,那就是:

Apache ServiceComb 是一个 Reactive 的、轻量级的微服务框架。

其底层依赖于 Vert.x,Vert.x 基于 Netty,全异步非阻塞通信,在各种压力测试对比中,Vert.x 都是名列前茅,被誉为“目前最快的Java框架”。

Apache ServiceComb 是 Apache 下毕业的第一个微服务框架,在这之前,此框架在华为内部孕育多年,如今已经被广泛使用。

Apache ServiceComb 更是支持多语言,目前包含 Java 客户端 java-chassis、Go 客户端 go-chassis,ServiceMesh 实现 mesher。

spring-cloud-huawei的目标是什么?

在 Java 领域,Spring 是当仁不让的事实标准,覆盖率非常高,SpringCloud 依托于 Spring 强大的用户基础,在微服务架构领域,有着非常多的用户。在社区,为了让原来使用 SpringCloud 的用户能够使用 Apache ServiceComb 的能力,在商业,为了让原来使用SpringCloud 的用户能够更方便的迁移到华为公有云,spring-cloud-huawei 面世。

目前服务发现已经完成,正在开发分布式事务和灰度发布功能。

SpringCloud 的扩展机制

SPI 是 Service Provider Interface 的缩写,相当于一种规范,是 JDK  内置的一种服务提供发现机制。只要在指定的目录定义好接口,引入符合规范的jar包就可以工作了,非常符合第三方开发者进行扩展。

当然,SPI 也有自身的问题。JDK 自带的 SPI 实现会一次性实例化所有扩展点,这会导致应用启动的时间变长,并且浪费不必要的资源。

Spring 就是采用的 SPI 机制进行扩展。Spring 如今的大红大紫,绝对和 Spring 近乎偏执的理念有关。与其他很多框架不同,Spring 更多强调的是开放性,或者说是扩展性。在 Spring 的全家桶中,很多组件都是从外部集成进来的,各种 starter 就是这些组件的集合。如注册发现,可以使用 Consul、Eureka、ZooKeeper、Etcd 等实现。

我们都知道,Spring Cloud 依赖于 Spring Boot,Spring Boot 又依赖于 Spring,Spring Cloud 的扩展性来源于 Spring Boot 中的@EnableAutoConfiguration, 大致的加载步骤如下:

1. SpringBoot 启动的时候,会扫描classpath下所有Jar中META-INF/spring.factories文件;

2. 读取指定的Configuration,根据Configuration上的Conditional条件自动创建bean;

3. 放入Spring Context中,这样就注入了容器,任何地方都可以直接注入使用了。

运行demo

通过项目中的示例开始实现服务注册发现。spring-cloud-huawei-sample/discovery-examples下提供了三个工程,用来模拟spring cloud

工程迁移到 Apache ServiceComb 的注册中心的场景:

* price-provider:价格服务,服务提供者,RESTful 方式提供接口。

* order-consumer:订单服务,服务消费者,RESTful 方式提供接口,以RestTemplate的方式调用 price-provider 获取价格信息。

* product-consumer-feign:产品服务,服务消费者,RESTful方式提供接口,以 feign 的方式调用 price-provider 获取价格信息。

按照如下步骤进行:

1.下载 [servicecomb-service-center]https://github.com/apache/servicecomb-service-center/releases

参考[servicecomb-service-center的quick start文档]https://github.com/apache/servicecomb-service-center#quick-start

运行 servicecomb-service-center

2.分别运行main函数,启动三个示例服务

通过actuator查看服务运行情况

http://127.0.0.1:8080/actuator/service-registry

正确情况会显示 UP

如果要设置服务的状态,可以通过:

curl -i -H "Content-Type: application/json" -X POST -d '{"status":"DOWN"}' http://localhost:8080/actuator/service-registry

将服务的状态修改为DOWN。

3.查看服务注册中心http://127.0.0.1:30100

查看实例运行状态。

4.curl、浏览器或使用postman验证调用情况,

product-consumer-feign访问地址:

 

http://127.0.0.1:8089/product?id=11

order-consume访问地址:

 

http://127.0.0.1:8088/order?id=11

SpringCloud如何使用ServiceComb的能力

spring-cloud-huawei:在SpringCloud中使用ServiceComb的能力_第2张图片

用户只需修改配置文件,无需修改代码,就能使用ServiceComb的服务中心。

spring-cloud-huawei:在SpringCloud中使用ServiceComb的能力_第3张图片

以下为ServiceComb的详细配置说明

Configuration Key Default Value
Enable ServiceComb discovery spring.cloud.servicecomb.discovery.enabled true
Registry address spring.cloud.servicecomb.discovery.address
Service name spring.cloud.servicecomb.discovery.serviceName
Appliaction name spring.cloud.servicecomb.discovery.appName default
version spring.cloud.servicecomb.discovery.version
Enable healthCheck spring.cloud.servicecomb.discovery.healthCheck true
HealthCheck Interval spring.cloud.servicecomb.discovery.healthCheckInterval 10s
Auto discovery Service-Center spring.cloud.servicecomb.discovery.autoDiscovery false

如何使用

因为 spring-cloud-huawei 还没有发布到公共仓库,如果要使用,需要先下载代码在本地构建。

mvn clean install

项目中可以使用 dependencyManagement 引入依赖。

   

 <dependencyManagement>      <dependencies>        <dependency>          <groupId>org.springframework.cloud.huaweigroupId>          <artifactId>spring-cloud-huawei-dependenciesartifactId>          <version>${project.version}version>          <type>pomtype>          <scope>importscope>        dependency>      dependencies>    dependencyManagement>

欢迎各位代码高手加入我们,一起贡献代码。

[更多内容](https://github.com/huaweicloud/spring-cloud-huawei/blob/master/README_zh.md)

往期精彩回顾

论无服务器架构的特征

【大咖连载】服务设计与实现

新特性解读 | Apache ServiceComb Toolkit 0.1.0发布

有趣的灵魂在等你

长按扫码添加小助手

点个在看少个bug

“阅读原文”一起来看线上直播吧!

你可能感兴趣的:(技术剖析)