
# 微服务注册发现
#### 操作场景
微服务是业务概念，某个进程提供某种服务，那它就是个微服务。每一个服务都具有自主运行的业务功能，对外开放不受语言限制的API (最常用的是HTTP)。多个微服务组成应用程序。
下面介绍如何调用[创建微服务静态信息 - CreateStaticInformationForMicroservice](https://support.huaweicloud.com/api-servicestage/cse_06_0040.html)API注册微服务my-provider后，先调用[注册微服务实例 - RegisterMicroserviceInstance](https://support.huaweicloud.com/api-servicestage/cse_06_0049.html)API注册微服务my-provider的实例，再次调用[创建微服务静态信息 - CreateStaticInformationForMicroservice](https://support.huaweicloud.com/api-servicestage/cse_06_0040.html)API注册微服务my-consumer，然后调用[按条件查询微服务实例 - QueryMicroserviceInstanceByFilterCriteria](https://support.huaweicloud.com/api-servicestage/cse_06_0056.html)API，my-consumer带着自身的serviceId去服务中心查询my-provider的实例信息。
![](https://support.huaweicloud.com/api-servicestage/public_sys-resources/note_3.0-zh-cn.png)
以上微服务名称均为示例。
API的调用方法请参见[如何调用API](https://support.huaweicloud.com/api-servicestage/servicestage_06_0008.html)。
#### 前提条件
- 获取IAM的Token，调用[获取用户Token](https://support.huaweicloud.com/api-iam/iam_30_0001.html)，并将token值设置为环境变量：export Token={token}。
- 获取微服务引擎的终端节点，请参考[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint/CSE)，以下示例中以{cse_endpoint}代替。
 
#### 操作步骤
1. 调用[创建微服务静态信息 - CreateStaticInformationForMicroservice](https://support.huaweicloud.com/api-servicestage/cse_06_0040.html)API注册微服务my-provider，请求示例如下：
   
   ```
   curl -k -H "x-domain-name:default" -H "x-auth-token:$Token" -XPOST "https://{cse_endpoint}/v4/default/registry/microservices" -d '{
       "service": {
           "serviceName": "my-provider",
           "appId": "default",
           "version": "1.0.0",
           "description": "test",
           "level": "MIDDLE",
           "status": "UP"
       }
   }'
   ```
   返回结果：
   ```
   {"serviceId":"918282e8562dc5fdc9a8dcd4d1baabb492190aa4"}
   ```
   记录加粗显示的serviceId值，用于替换后续示例中的{providerServiceId}。
   
   
2. 调用[注册微服务实例 - RegisterMicroserviceInstance](https://support.huaweicloud.com/api-servicestage/cse_06_0049.html)API注册微服务my-provider的实例。
   
   实例有效期1小时，到期自动下线。假设provider实例侦听的地址为127.0.0.1:8080，请求示例如下：
   ```
   curl -k -H "x-domain-name:default" -H "x-auth-token:$Token" -XPOST "https://{cse_endpoint}/v4/default/registry/microservices/{providerServiceId}/instances" -d '{
       "instance": {
           "hostName": "test",
           "endpoints": [
               "rest:127.0.0.1:8080"
           ],
           "status": "UP",
           "healthCheck": {
               "mode": "push",
               "interval": 900,
               "times": 3
           }
       }
   }'
   ```
   返回结果：
   ```
   {"instanceId":"2be605a095ed11eabcbe0255ac100fa3"}
   ```
   
   
3. 调用[创建微服务静态信息 - CreateStaticInformationForMicroservice](https://support.huaweicloud.com/api-servicestage/cse_06_0040.html)API注册微服务my-consumer，请求示例如下：
   
   ```
   curl -k -H "x-domain-name:default" -H "x-auth-token:$Token" -XPOST "https://{cse_endpoint}/v4/default/registry/microservices" -d '{
       "service": {
           "serviceName": "my-consumer",
           "appId": "default",
           "version": "1.0.0",
           "description": "test",
           "level": "MIDDLE",
           "status": "UP"
       }
   }'
   ```
   返回结果：
   ```
   {"serviceId":"9db248934c31fc754d6e922b48ede4a5c004d3c1"}
   ```
   记录加粗显示的serviceId值，用于替换后续示例中的{consumerServiceId}代替。
   
   
4. 调用[按条件查询微服务实例 - QueryMicroserviceInstanceByFilterCriteria](https://support.huaweicloud.com/api-servicestage/cse_06_0056.html)接口，my-consumer带着自身的serviceId去服务中心查询my-provider的实例信息。请求示例如下：
   
   ```
   curl -k -H "x-domain-name:default" -H "x-auth-token:$Token" -H "X-ConsumerId:{consumerServiceId}" -XGET "https://{cse_endpoint}/v4/default/registry/instances?appId=default&serviceName=my-provider&version=0.0.0%2B"
   ```
   返回结果：
   ```
   {
       "instances": [
           {
               "instanceId": "2be605a095ed11eabcbe0255ac100fa3", 
               "serviceId": "918282e8562dc5fdc9a8dcd4d1baabb492190aa4", 
               "endpoints": [
                   "rest:127.0.0.1:8080"
               ], 
               "hostName": "test", 
               "status": "UP", 
               "healthCheck": {
                   "mode": "push", 
                   "interval": 150, 
                   "times": 3
               }, 
               "timestamp": "1589465646", 
               "modTimestamp": "1589465646", 
               "version": "1.0.0"
           }
       ]
   }
   ```
   在实际业务中，my-consumer可从实例查询结果中的"endpoint"字段获取my-provider实例的地址，发起业务调用。
   您还可以进入ServiceStage控制台，单击微服务引擎的"查看控制台"，在"服务目录"查看服务注册信息。
   
   
 
