
# 使用服务注册
微服务引擎的服务中心提供了服务注册的功能。服务注册是指微服务启动的时候，将基本信息，比如所属应用、微服务名称、微服务版本、侦听的地址信息等注册到服务中心。
微服务运行的过程中，也通过服务中心查询其他微服务的基本信息。不同的微服务开发框架注册的信息会有差异，比如Java Chassis还会注册服务契约等信息。不同微服务开发框架注册的基本信息、注册和发现其他微服务的流程是相同的。
本章节重点介绍不同的微服务开发框架如何使用服务中心和配置自己的注册信息，同时也会介绍微服务和注册中心之间交互有关的配置项。微服务注册成功后，可以在微服务引擎使用微服务目录、微服务实例列表、微服务依赖关系等功能。
#### Spring Cloud
Spring Cloud使用服务注册，需要在项目中增加如下依赖：
```
<dependency> 
  <groupId>com.huaweicloud</groupId>  
  <artifactId>spring-cloud-starter-huawei-servicecomb-discovery</artifactId> 
</dependency>
```
如果项目已经直接或者间接包含这个依赖，则无需添加。Spring Cloud包含如[表1]所示配置项，这些配置项的值影响在服务中心注册的基本信息，以及微服务和服务中心之间的交互，比如心跳等。和服务注册有关的信息，需要在"bootstrap.yml"配置。
 表1Spring Cloud常用配置项 
| 配置项                                                         | 含义           | 缺省值     | 备注                                |
|:---|:---|:---|:---|
| spring.cloud.servicecomb.discovery.appName                  | 所属应用         | default | -                                 |
| spring.cloud.servicecomb.discovery.serviceName              | 微服务名称        | -       | 如果没有，使用spring.application.name。   |
| spring.cloud.servicecomb.discovery.version                  | 微服务版本        | -       | -                                 |
| server.env                                                  | 环境           | -       | 取值为环境ID。如production，development等。 |
| spring.cloud.servicecomb.discovery.enabled                  | 是否启用服务注册发现   | true    | -                                 |
| spring.cloud.servicecomb.discovery.address                  | 注册中心地址       | -       | 集群地址使用","分隔。                      |
| spring.cloud.servicecomb.discovery.watch                    | 是否开启watch模式  | false   | 微服务引擎专业版需要设置为false。               |
| spring.cloud.servicecomb.discovery.healthCheckInterval      | 发送心跳的时间间隔（秒） | 15      | 可配置的取值范围：≥ 1且≤600。                |
| spring.cloud.servicecomb.discovery.datacenter.name          | 数据中心名称       | -       | -                                 |
| spring.cloud.servicecomb.discovery.datacenter.region        | 数据中心区域       | -       | -                                 |
| spring.cloud.servicecomb.discovery.datacenter.availableZone | 数据中心可用区      | -       | -                                 |
| spring.cloud.servicecomb.discovery.allowCrossApp            | 是否支持跨应用调用    | false   | 服务端配置，表示允许不同应用下的客户端发现自己。          |
   
#### Java Chassis
Java Chassis使用服务注册，需要在项目中增加如下依赖：
```
<dependency>
  <groupId>org.apache.servicecomb</groupId>
  <artifactId>registry-service-center</artifactId>
</dependency>
```
如果项目已经直接或者间接包含这个依赖，则无需添加。Java Chassis包含如[表2]所示配置项。这些配置项的值影响在服务中心注册的基本信息，以及微服务和服务中心之间的交互，比如心跳等。
 表2Java Chassis常用配置项 
| 配置项                                                        | 含义                                                                                                        | 缺省值                    | 备注                                      |
|:---|:---|:---|:---|
| servicecomb.service.application                            | 所属应用                                                                                                      | default                | -                                       |
| servicecomb.service.name                                   | 微服务名称                                                                                                     | defaultMicroservice    | -                                       |
| servicecomb.service.version                                | 微服务版本                                                                                                     | 1.0.0.0                | -                                       |
| servicecomb.service.environment                            | 环境                                                                                                        | -                      | 取值为环境ID。如production，development等。       |
| servicecomb.service.registry.address                       | 注册中心地址                                                                                                    | http://127.0.0.1:30100 | 集群地址使用","分隔。                            |
| servicecomb.service.registry.instance.watch                | 是否开启watch模式                                                                                               | true                   | -                                       |
| servicecomb.service.registry.instance.healthCheck.interval | 发送心跳的时间间隔（秒）                                                                                              | 30                     | -  |
| servicecomb.service.registry.instance.healthCheck.times    | 允许的心跳失败次数。当连续第times+1次心跳仍然失败时则实例被服务中心下线。即interval \* (times + 1)决定了实例被自动注销的时间。如果服务中心等待这么长的时间没有收取到心跳，会注销实例 | 3                      | -                                       |
| servicecomb.datacenter.name                                | 数据中心名称                                                                                                    | -                      | -                                       |
| servicecomb.datacenter.region                              | 数据中心区域                                                                                                    | -                      | -                                       |
| servicecomb.datacenter.availableZone                       | 数据中心可用区                                                                                                   | -                      | -                                       |
   
Java Chassis注册的实例地址信息、侦听地址，和配置项servicecomb.service.publishAddress指定的发布地址有关。服务侦听地址的配置项是servicecomb.rest.address和servicecomb.highway.address，分别对应rest传输方式和highway传输方式的侦听地址。注册的地址信息和侦听地址、发布地址的关系如[表3]所示。
 表3注册的实例地址生效规则 
| 侦听地址      | 发布地址    | 注册的实例地址                                 |
|:---|:---|:---|
| 127.0.0.1 | -       | 127.0.0.1                               |
| 0.0.0.0   | -       | 指定选取一张网卡的IP地址作为发布地址。不会选择通配符地址、回环地址或广播地址 |
| 具体IP地址    | -       | 与侦听地址一致                                 |
| \*        | 具体IP地址  | 与发布地址一致                                 |
| \*        | "{网卡名}" | 指定网卡名对应的IP，注意需要加上引号和括号                  |
   
