Nacos Java Api和Namespace介绍

这篇具有很好参考价值的文章主要介绍了Nacos Java Api和Namespace介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这个是nacos的架构图,https://nacos.io/en-us/docs/architecture.html
nacos api,Nacos,java,restful,postman

在1.x的 Nacos 版本中服务端只支持 http 协议,后来为了提升性能在2.x版本引入了谷歌的 grpc,grpc 是一款长连接协议,极大的减少了 http 请求频繁的连接创建和销毁过程,能大幅度提升性能,节约资源。据官方测试,Nacos服务端 grpc 版本,相比 http 版本的性能提升了9倍以上。

grpc的端口会相对于server.port端口做的偏移,nacos的http端口为8848,则grpc的会使用8848+1000,即9848作为和客户端的通信端口,同时grpc会使用8848+1001,即9849作为nacos集群间的数据同步端口。

http协议

这里演示一下http的方式,看下https://nacos.io/zh-cn/docs/quick-start.html 官网在这里写了

nacos api,Nacos,java,restful,postman

我用postman操作下

nacos api,Nacos,java,restful,postman

看下服务端,已经注册上来了
nacos api,Nacos,java,restful,postman

我们知道http是restful风格,那肯定会有个controller来接收的,所以在代码里搜下这个路径
nacos api,Nacos,java,restful,postman

再请求一下,打个断点,看到已经进来了,请求参数以及返回的ok,证明我们的猜想是正确的
nacos api,Nacos,java,restful,postman

再操作一下获取,也是可以拿到数据的,找源码代码的方法也是类似
nacos api,Nacos,java,restful,postman

gRPC协议

http协议可以通过postman来模拟,gRPC协议只能通过代码来模拟了,我们看官网https://nacos.io/zh-cn/docs/sdk.html sdk页,注册用的是registerInstance方法。

nacos api,Nacos,java,restful,postman

我先新建一个项目,在pom文件里面引入nacos-client

<dependency>  
    <groupId>com.alibaba.nacos</groupId>  
    <artifactId>nacos-client</artifactId>  
    <version>2.0.4</version>  
</dependency>

写如下一段测试代码

    public static void main(String[] args) throws NacosException, IOException {
        Properties properties = new Properties();
        properties.setProperty("serverAddr","127.0.0.1:8848");  // 集群地址使用","隔开
        NamingService naming = NamingFactory.createNamingService(properties);

        //注册1
        naming.registerInstance("nacos.test.3", "11.11.11.11", 8888, "TEST1");

        Instance instance = new Instance();
        instance.setIp("55.55.55.55");
        instance.setPort(9999);
        instance.setHealthy(false);
        instance.setWeight(2.0);
        instance.setEnabled(true);
        instance.setEphemeral(true);//AP(distro)、CP(Raft)
        Map<String, String> instanceMeta = new HashMap<>();
        instanceMeta.put("site", "et2");
        instance.setMetadata(instanceMeta);
        //注册2
        naming.registerInstance("nacos.test.4", instance);

        System.out.println("-----服务发现1-----");
        System.out.println(naming.getAllInstances("nacos.test.3"));
        System.out.println("-----服务发现2-----");
        System.out.println(naming.getAllInstances("nacos.test.4"));

        // 只要这个进程不停止,就意味着nacos client会不断地向nacos server发送心跳  时间间隔
        System.in.read();
    }

执行一下,发现已经能够成功取到注册的信息了
nacos api,Nacos,java,restful,postman

再看下本地的nacos也已经成功注上来了,证明这段SDK是没问题的。
nacos api,Nacos,java,restful,postman

Spring Cloud集成

Spring Cloud集成让服务与注册变得更加简单,使用非常的简单,不用写大量代码,当然它的底层肯定调的还是nacos-client的sdk。

首先介绍一下这样的调用关系,接下来将按照这样的端口进行访问演示。

nacos api,Nacos,java,restful,postman

创建一个Spring Boot项目,里面有user-client和coupon-client两个子项目
nacos api,Nacos,java,restful,postman

先对coupon-client引入nacos的pom依赖

<dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  
</dependency>

细心的小伙伴会发现这里没有写version的版本号,对,就是要不写,因为我要用版本管理,就比如spring cloud alibaba有Nacos,有Sentinel,有RocketMQ,有Seata,如果全都靠自己引,自己升级版本的话会出问题,各种不兼容,各种架包冲突,所以我们用厂商自己提供的版本管理依赖。这里的200.6和2021.0.4.0版本怎么选择,在上篇文章
《从二进制和源码安装Nacos》 中介绍过了。

    <dependencyManagement>
        <dependencies>
            <!-- 引入spring cloud 版本管理 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- 引入spring cloud alibaba 版本管理 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.4.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--引入spring cloud netflix 版本管理-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-netflix-dependencies</artifactId>
                <version>3.1.4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

接着就是在application.yml文件中配置

server:
  port: 8082

spring:
  application:
    # 服务名称
    name: coupon
  cloud:
    nacos:
      # nacos server的地址
      server-addr: localhost:8848

启动一下,已经启动成功了

nacos api,Nacos,java,restful,postman

刷新一下服务列表,也已经注册成功了
nacos api,Nacos,java,restful,postman

所以我们发现用Spring Cloud的集成非常简单,两步即可完成,第一步是引用依赖,第二步是配置yml文件。上面画的关系图,一共要启三个coupon-client,所以需要再加两个,在idea里面配一下。

nacos api,Nacos,java,restful,postman

启动一下,发现也都注册上来了

nacos api,Nacos,java,restful,postman

接下来就是启动user-client,前面两步还是一样的,只是这里多写了一个controller类,要做调用的。

@RestController
@RequestMapping("/user")
public class UserController {
    
    //自动装配
    @Resource
    private DiscoveryClient discoveryClient;

    // 服务发现
    @RequestMapping("/instances")
    public List<ServiceInstance> instances() {
        // 根据order名称获取到urls
        return this.discoveryClient.getInstances("coupon");
    }
    
}

启动一下,四个服务都已经注册上来了

nacos api,Nacos,java,restful,postman

用postman请求一下,成功获取到了值。

nacos api,Nacos,java,restful,postman

领域划分

在Nacos里有一些领域划分,帮助我们管理instance实例,先看下下面的关系图

nacos api,Nacos,java,restful,postman

Namespace

namespace命名空间,为了保证不同环境配置实现隔离。默认在nacos中存在一个 public 命名空间,所有配置在没有指定命名空间时都在这个命名空间中获取配置,在实际开发时可以针对于不能环境创建不同的namespace空间。

新建一个命名空间dev
nacos api,Nacos,java,restful,postman

nacos api,Nacos,java,restful,postman

我们在项目启动的时候可以指定namespace,这里注意填的是命名空间ID,不是命名空间名称

nacos api,Nacos,java,restful,postman

我们把8082启动一下,发现它已经在dev的命名空间下面了

nacos api,Nacos,java,restful,postman

对应着user-client在启动的时候namespace也要设置成dev,否则是访问不到coupon的数据的,环境是隔离的,不能跨namespace访问的。

Group

group是分组机制,它的纬度是实现服务注册信息或者DataId的分组管理机制,对于group的用法,没有固定的规则,它也可以实现不同环境下的分组,也可以实现同一个应用下不同配置类型或者不同业务类型的分组。

官方建议是,group可以专注在业务层面的数据分组。实际上在使用过程中,最重要的是提前定要统一的口径和规定,避免不同的项目团队混用导致后期维护混乱的问题。

用法和Namespace类似,在yml文件中配置即可

nacos api,Nacos,java,restful,postman

nacos api,Nacos,java,restful,postman

Service

Service就是服务名称,比如user,coupon

nacos api,Nacos,java,restful,postman

Cluster

先来感受一下,我在yml文件里面一个配了上海,一个配了北京

nacos api,Nacos,java,restful,postman

nacos api,Nacos,java,restful,postman

到nacos上看下就很清晰了,一台8082机器在上海,一台8083机器在北京,集群就是一组机器,一般都是放在两个机房的,为了容灾,为了备份,也是方便管理,就是这个作用。
nacos api,Nacos,java,restful,postman

所有的领域划分,一些中小型公司不用这么严格,比如有的公司就不用Group这一层,也不用集群也是可以的。有的公司直接不用Namespace层,直接用Group做dev、prod也是可以的。

元数据

同样也是先配置一下,感受一下

nacos api,Nacos,java,restful,postman

注册上来就是这样的
nacos api,Nacos,java,restful,postman

元数据就是元数据,想用的时候就可以用它,不想用的话知道下有这么个东西,万一哪天用上了呢。。

后记

上面所有的领域划分在源码中就是双层map,map套map,即通过namespace+group+serviceName即可确定一个服务,后面在讲源码的时候再讲。
nacos api,Nacos,java,restful,postman

最后本文代码源码在:https://github.com/xuhaoj/spring-boot-nacos-client ,感谢大家观看,欢迎点赞,收藏,关注~文章来源地址https://www.toymoban.com/news/detail-776159.html

到了这里,关于Nacos Java Api和Namespace介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包