{% include toc %}
在微服务架构中,一个应用由一组职责单一化的服务组成,各个服务被动态的部署到不同的节点。面对这样一组服务,应该如何去管理服务之间的依赖关系呢?
服务注册中心的出现正是为了解决这样的问题,它提供的注册机制,允许服务提供者将自己的信息登记到中心;提供的发现机制,供服务消费者从中心查找服务提供者信息。 服务注册中心有以下几个优点:
如上图,Service-Center中服务发现流程大致有以下几个步骤:
Service-Center注册发现接口基于RESTful标准实现,不受开发语言限制,接口定义请参考官方API文档
以下将通过 curl 命令模拟 Service-center 中的服务注册与发现,以便于了解其流程。
$ curl -X POST \ http://127.0.0.1:30100/registry/v3/microservices \ -H 'content-type: application/json' \ -H 'x-domain-name: default' \ -d '{ "service": { "appId": "default", "serviceName": "ProviderDemoService", "version":"1.0.0" } }' {"serviceId":"fa82132706a6b75a13393d8cf48800f9689b2603"}
$ curl -X POST \ http://127.0.0.1:30100/registry/v3/microservices/fa82132706a6b75a13393d8cf48800f9689b2603/instances \ -H 'content-type: application/json' \ -H 'x-domain-name: default' \ -d '{ "instance": { "hostName":"provider-demo", "endpoints": [ "rest://127.0.0.1:8080" ] } }' {"instanceId":"6e160fb0196e11e9b8b50242ac110005"}
$ curl -X POST \ http://127.0.0.1:30100/registry/v3/microservices \ -H 'content-type: application/json' \ -H 'x-domain-name: default' \ -d '{ "service": { "appId": "default", "serviceName": "ConsumerDemoService", "version":"1.0.0" } }' {"serviceId":"d08d29edbeaa372c5be88407aa9adb00b4cb6099"}
$ curl -X GET \ 'http://127.0.0.1:30100/registry/v3/instances?appId=default&serviceName=ProviderDemoService&version=latest' \ -H 'content-type: application/json' \ -H 'x-consumerid: d08d29edbeaa372c5be88407aa9adb00b4cb6099' \ -H 'x-domain-name: default' { "instances": [ { "instanceId": "c23da577197111e9b8b50242ac110005", "serviceId": "fa82132706a6b75a13393d8cf48800f9689b2603", "endpoints": [ "rest://127.0.0.1:8080" ], "hostName": "provider-demo", "status": "UP", "healthCheck": { "mode": "push", "interval": 30, "times": 3 }, "timestamp": "1547631199", "modTimestamp": "1547631199", "version": "1.0.0" } ] }