初识ServiceComb
一、什么是ServiceComb
ServiceComb是华为2017年开源的微服务框架,ServiceComb在华为内部的实践中沉淀了丰富的企业级应用开发经验,该项目已于2017年12月进入Apache孵化器。ServiceComb是开源的,现在已经成为了Apache的顶级项目。Apache ServiceComb的官网地址
二、ServiceComb的使用
2.1 Service-Center注册中心
使用ServiceComb,首先我们需要下载ServiceComb提供的注册中心Service-Center,下载地址:http://servicecomb.apache.org/cn/release/ (下载 ServiceComb Service-Center x.x.x)
下载到本地后,解压后目录结构如下:
其中,frontend.exe是前台监控启动程序,service-center.exe是后台服务启动程序,这两个程序都需要双击启动,注册中心才能正常运行。
访问地址:http://127.0.0.1:30103
2.2 搭建ServiceComb项目
- 为了能够使开发者可以快速构建ServiceComb应用程序,官方提供了一套脚手架,这样能够方便学习者及应用开发者快速入门,同时极大的提高了效率。地址是:http://start.servicecomb.io/
- 自行搭建ServiceComb项目
首先,创建maven项目,修改pom,添加依赖;
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-dependencies</artifactId>
<version>1.2.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>spring-boot-starter-provider</artifactId>
</dependency>
</dependencies>
配置microservice.yaml(换成yml文件也可)
其中,rest:addres中IP不要写成0.0.0.0,会有一些问题
APPLICATION_ID: bossapp
service_description:
name: HelloServiceComb
version: 1.0.0
servicecomb:
handler:
chain:
Provider: {}
rest:
address: localhost:9090
service:
registry:
address: http://127.0.0.1:30100
autodiscovery: false
搭建启动类,使用@EnableServiceComb
注解
@SpringBootApplication
@EnableServiceComb
public class CombTestApplication {
public static void main(String[] args) {
SpringApplication.run(CombTestApplication.class, args);
}
}
搭建provider,使用@RestSchema
注解。@RestSchema
这个注解是为了表明该应用使用的rest协议,还有@RpcSchema
对应rpc协议,这个里面的schemaId保证唯一即可。(其中,REST和RPC协议详解,见 理解REST和RPC)
@RestSchema(schemaId = "hello")
@RequestMapping(path = "/")
public class HelloImpl {
@GetMapping(path = "/hello")
public String hello() {
return "Hello World!";
}
}
搭建Consumer。
public class HelloConsumer {
private final RestTemplate restTemplate = RestTemplateBuilder.create();
public void invokeHello() {
//service url is : cse://serviceName/operation
String serviceName = "HelloServiceComb";
restTemplate.getForObject("cse://" + serviceName + "/hello", String.class);
}
}
2.3 ServiceComb配置
注意:Provider 服务在 30 秒内未向 Service-Center 发送心跳,将会被下线。所以服务发现的请求应在 Provider 服务创建实例后 30 秒内发出才会成功发现实例。
所以,在关闭Provider 服务后Service-Center注册中心实例不会立刻下线。
若想要实现即时响应,配置发送心跳时间即可。
APPLICATION_ID: bossapp
service_description:
name: HelloServiceComb
version: 1.0.0
servicecomb:
handler:
chain:
Provider: {}
rest:
address: localhost:9090
service:
registry:
address: http://127.0.0.1:30100
autodiscovery: false
instance:
healthCheck:
interval: 1 # 健康检查间隔时间,默认30秒,可选
times: 3 # 健康检查检测次数,默认3次,可选
watch: true # watch机制可以快速感知实例变化
preferIpAddress: false #是否选用ip地址作为实例名称,true表示使用ip,否则使用hostname
diagnose:
interval: 12
其他详细具体配置见:ServiceComb常见配置项解析