您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
微服务ServiceComb入门案例
 
作者:zengdongwen
   次浏览      
 2020-8-19  
   
 
编辑推荐:
文章主要介绍了微服务开发的方式 及入门案例来学习ServiceComb,包含怎么进行工程的创建。
本文来自于csdn,由火龙果软件Anna编辑、推荐。

ServiceComb是华为2017年开源的微服务框架,ServiceComb在华为内部的实践中沉淀了丰富的企业级应用开发经验,该项目已于2017年12月进入Apache孵化器。注意:ServiceComb是华为开源的,华为确实很厉害啊。华为把他贡献给了Apache,现在已经成为了Apache的顶级项目。Apache ServiceComb的官网地址(注意:官网提供中文版哦,对于英语不好的朋友,这是一个福音,毕竟是咱中国人自己开发的啊)。

微服务开发的方式主要有一下三种:

1、dubbo+zookeeper

2、spring boot+spring cloud

3、ServiceComb

那么,ServiceComb和Spring cloud相比有什么优点呢?主要的优点有以下几点:

1、ServiceComb支持的通信协议比SpringCloud多。ServiceComb支持多种通信协议, Rest、Highway(RPC)等

SpringCloud仅支持Rest。

2、相比SpringCloud的Rest协议,Highway(RPC)协议性能更高,Highway是基于二进制的序列化方式传输数

据,采用二进制编码的系统的性能远高于采用文本的HTTP协议。

3、ServiceComb的商业版本CSE相比SpringCloud不仅提供了微服务开发框架,还提供了微服务云部署,管理、治

理等一站式解决方案。

4、还有这是中国人开发的,官网都提供了中文文档,对于我们学习者来说这也是一大好处啊。

下面我们就通过一个简单的入门案例来学习ServiceComb:

为了能够使开发者可以快速构建ServiceComb应用程序,为我们提供了一套脚手架,这样能够方便学习者及应用开发者快速入门,同时极大的提高了效率。

1.访问快速开发引导页:http://start.servicecomb.io/

后面我们就可以填写工程相关内容,最后就可以生成代码了。

解压工程,导入到Idea工具中,然后编写自己的业务代码就可以了。

上面的方式更快速,更简单的创建一个ServiceComb的案例,但是我觉得要更好的了解,就应该从零开始,一步一步的去搭建工程,编写代码,所以下面就开始一步一步的来实现:

开发环境:IDEA,JDK1.8以上,maven 3.3.0以上

首先我们需要下载官网提供的注册中心,下载

下载如下:

下载到本地后,解压(不要解压到中文目录下),目录结构如下:

建议每次都启动这两个程序。前台访问地址:http://127.0.0.1:30103,后台地址是:http://127.0.0.1:30100

下面进行工程的创建:

1、创建父工程HelloWorldDemo

1.1 在IDEA开发工具中,点击file——》new——》project

点击next进入下一步,填写好GroupId和ArtifactId,继续点击next进入下一步,进入maven的配置:

配置好自己的maven,然后点击next,直到finish即可。我这里只讲了重要的部分,其他的创建我相信大家都知道,如果不清楚的自行查找资料。

在pom.xml文件中添加如下的依赖:


<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<!--1.实现pom文件导入-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-dependencies</artifactId>
<version>1.0.0-m2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

2、创建api接口模块

2.1 我们在父工程的基础上,创建一个api的接口工程,步骤如下:

选择父工程的基础上,点击file——》new——》module,选择maven,直接点击next(不需要选择骨架),然后填写ArtifactId:hello-world-api,点击next,直到finish即可。工程结构如下:

这个时候的java和resources没有表明是源代码和配置文件资源目录,我们需要手动转一下,右击java,会出现如下列表:

我们选择第一个Sources Root,同理,resources目录也是右击,然后选择Resouces Root,操作完成之后,目录变化如下:

注意:之后我们创建的其他工程,都需要进行这一步操作,需要自行去操作完成,不再赘述步骤。

2.2 然后,我们就在api工程中添加一个接口:

2.2.1 创建一个包:com.zdw.helloworld.api

2.2.2 创建一个接口:HelloWorldInterfaces,内容如下:

package com.zdw.helloworld.api;

/**
* Create By zdw on 2019/6/24
*/
public interface HelloWorldInterfaces {
String sayHello(String name);
}

 

2.2.3 我们要把api工程执行install,安装到本地,因为接下来我们的其他工程要依赖这个工程的。

注意,执行install命令的时候,我们先把父工程的pom文件中的 <build> 部分注释掉,否则会失败,执行完install之后再放开。

3、创建服务提供者模块provider

3.1 跟上面的一样,在父工程创建一个模块:hello-world-provider

3.2 在模块的pom.xml文件中,添加如下依赖:

<dependencies>
<!--hibernate校验规则-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

<!--rest支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

<!--ServiceComb提供的支持-->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
</dependency>
<!--springboot与web整合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>com.zdw</groupId>
<artifactId>hello-world-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

 

3.3 在resources目录下面创建microservice.yaml配置文件,里面的内容如下:

APPLICATION_ID: helloworlddemo
service_description:
name: demo-provider
version: 1.0.0
servicecomb:
rest:
address: 0.0.0.0:9000
service:
registry:
address: http://127.0.0.1:30100

3.4 创建启动类:

 

 

我们会发现,这个启动类比以前我们接触的SpringBoot的启动类多了一个注解:@EnableServiceComb,这个注解的作用就是表明这是ServiceComb应用,启用java.chassis核心功能。很重要的一个注解。

3.5 创建业务类:

注意:@RestSchema这个注解是为了表明该应用使用的rest协议,还有一种是RPC协议,对应的注解是:@RpcSchema,这个里面的schemaId保证唯一即可。

此时,我们已经可以启动服务提供者,在浏览器上进行测试了。不过我们要先启动本地注册中心。

4、创建消费者工程

4.1 在父工程的基础上创建消费者模块:hello-world-consumer

4.2 pom.xml文件添加如下依赖:

<dependencies>
<!--hibernate校验规则-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>

<!--rest支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

<!--ServiceComb提供的支持-->
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
</dependency>
<!--springboot与web整合-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>com.zdw</groupId>
<artifactId>hello-world-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

</dependencies>

 

4.3 在resources目录下创建配置文件microservice.yaml,内容如下:

APPLICATION_ID: helloworlddemo
service_description:
name: demo-consumer
version: 1.0.0
servicecomb:
rest:
address: 0.0.0.0:9001
service:
registry:
address: http://127.0.0.1:30100 #本地注册中心的地址

4.4 创建启动类:

 

4.5 创建业务代码类:

这里有两种方式:第一种是通过rest方式来调用服务提供者的服务,第二种是通过rpc方式来调用服务提供者的服务。这里也说明了ServiceComb的强大之处,我们知道,在服务提供者提供端,我们声明的Rest协议的,但是我们调用的时候,并不仅限于Rest协议,同样可以使用rpc协议来调用,下面依次讲解:

4.5.1 Rest协议调用服务

测试:启动本地注册中心,启动服务者,启动消费者,访问地址:http://localhost:9001/request?name=aa

我们还可以通过前台控制页面查看:http://127.0.0.1:30103

4.5.2 Rpc协议调用

我们重新定义一个新的业务代码类:RpcConsumerController

 

当我们再次启动消费者工程的时候,发现启动报错了,主要错误如下:

Caused by: java.lang.IllegalStateException: There is a schema only existing in local microservice: [rpcConsumerController], which means there are interfaces changed. You need to increment microservice version before deploying, or you can configure service_description.environment =development to work in development environment and ignore this error

这说明我们之前已经注册过该服务到注册中心,现在服务有了变动,需要我们去处理。最简单的方式就是,我们到本地注册中心的目录下,删除data文件夹,然后重新启动本地注册中心。然后我们再次启动服务提供者和消费者,发现启动成功。

此时我们访问地址:http://localhost:9001/rpc/request?name=aa 也可以得到正确的结果。

同时之前的访问地址:http://localhost:9001/request?name=aa 也是可以的。

入门案例到这里就告一段落了,是不是觉得很简单啊,哈哈。不过我还遇到过一个坑,这里也简单说明一下。当我们在microservice.yaml文件中配置:rest: address: 0.0.0.0:9000 的时候,一定要保证端口是不被占用的,如果是占用话,会出现以下错误:此时我配置的是8080

Caused by: org.apache.servicecomb.foundation.common .exceptions.ServiceCombException: all transport named rest refused to init.

所以如果出现了上述的错误,我们就要看看是不是端口被占用了。

 
   
次浏览       
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
大数据平台下的数据治理
如何设计实时数据平台(技术篇)
大数据资产管理总体框架概述
Kafka架构和原理
ELK多种架构及优劣
最新课程
大数据平台搭建与高性能计算
大数据平台架构与应用实战
大数据系统运维
大数据分析与管理
Python及数据分析
更多...   
成功案例
某通信设备企业 Python数据分析与挖掘
某银行 人工智能+Python+大数据
北京 Python及数据分析
神龙汽车 大数据技术平台-Hadoop
中国电信 大数据时代与现代企业的数据化运营实践
更多...