SpringCloudAlibaba系列(四):Nacos服务发现、与Spring、Boot、Cloud集成

star2017 1年前 ⋅ 1453 阅读

Nacos 提供了 SDKOpen API 的方式来完成服务注册与发现等操作。

Nacos 为 Spring,Spring Boot,Spring Cloud 集成提供了相应的 JAR 包和示例。

Nacos官网Spring Cloud > Spring Cloud AlibabaGithub > Spring Cloud AlibabaGithub > Spring Cloud Alibaba WikiGithub > Spring Cloud Alibaba Wiki > Nacos discoveryGithub > Nacos

服务注册与发现

Nacos 提供了 SDKOpen API 的方式来完成服务注册与发现等操作,Open API 是 REST 接口,所以 SDK 本质上是对 HTTP 请求的封装。下面是 Open API 演示服务注册与发现。

服务注册

注册一个服务实例到Nacos 服务,上报实例的服务名、IP地址、端口号,这三个参数是必须;上传还可以包括命名空间ID,权重,是否上线,是否健康,扩展信息,集群名,分组名,是否临时实例。

请求:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

返回:

ok

服务发现

请求:

curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'

返回:

{
    "name": "DEFAULT_GROUP@@nacos.naming.serviceName",
    "groupName": "DEFAULT_GROUP",
    "clusters": "",
    "cacheMillis": 10000,
    "hosts": [
        {
            "instanceId": "192.168.0.120#8080#DEFAULT#DEFAULT_GROUP@@nacos.naming.serviceName",
            "ip": "192.168.0.120",
            "port": 8080,
            "weight": 1.0,
            "healthy": true,
            "enabled": true,
            "ephemeral": true,
            "clusterName": "DEFAULT",
            "serviceName": "DEFAULT_GROUP@@nacos.naming.serviceName",
            "metadata": {},
            "instanceHeartBeatInterval": 5000,
            "instanceIdGenerator": "simple",
            "instanceHeartBeatTimeOut": 15000,
            "ipDeleteTimeout": 30000
        }
    ],
    "lastRefTime": 1618117076330,
    "checksum": "",
    "allIPs": false,
    "reachProtectionThreshold": false,
    "valid": true
}

发布配置

请求:

curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"

返回:

true

获取配置

请求:

curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"

返回:

HelloWorld

Nacos Spring

Nacos 为 Spring 集成提供了 nacos-spring-context 包。提供了注解的方式很方便地实现服务注册与发现。

官方文档 > Nacos Spring,完整示列代码请参考:nacos-spring-config-example

Nacos Spring Boot

Nacos 为 Spring Boot 集成提供了 starter 包:nacos-config-spring-boot-starter

通过自动配置以及其他 Spring 编程模型的习惯用法为 Spring Boot 应用程序在服务注册与发现方面提供和 Nacos 的无缝集成。 通过一些简单的注解,就可以快速注册一个服务。

完整示例代码可参考:nacos-spring-boot-discovery-example

添加依赖

创建 Spring Boot 应用,添加 nacos-discovery-spring-boot-starter依赖。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>${latest.version}</version>
</dependency>

注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

配置Nacos服务

application.properties 中配置 Nacos server 的地址。

nacos.discovery.server-addr=127.0.0.1:8848

注册服务

通过调用 Nacos Open API 向 Nacos server 注册一个名称为 example 服务

curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'

服务发现

使用 @NacosInjected 注入 Nacos 的 NamingService 实例:

@Controller
@RequestMapping("discovery")
public class DiscoveryController {

    @NacosInjected
    private NamingService namingService;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public List<Instance> get(@RequestParam String serviceName) throws NacosException {
        // 发现服务
        return namingService.getAllInstances(serviceName);
    }
}

@SpringBootApplication
public class NacosDiscoveryApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosDiscoveryApplication.class, args);
    }
}

启动 Spring Boot 应用,调用 curl http://localhost:8080/discovery/get?serviceName=example,返回内容为:

[
  {
    "instanceId": "127.0.0.1-8080-DEFAULT-example",
    "ip": "127.0.0.1",
    "port": 8080,
    "weight": 1.0,
    "healthy": true,
    "cluster": {
      "serviceName": null,
      "name": "",
      "healthChecker": {
        "type": "TCP"
      },
      "defaultPort": 80,
      "defaultCheckPort": 80,
      "useIPPort4Check": true,
      "metadata": {}
    },
    "service": null,
    "metadata": {}
  }
]

如果没有注册服,返回的是一个为空 JSON 数组[]

Nacos Spring Cloud

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: