zoukankan      html  css  js  c++  java
  • Spring Cloud Alibaba学习笔记(2)

    1.什么是Nacos

      Nacos的官网对这一问题进行了详细的介绍,通俗的来说:

      Nacos是一个服务发现组件,同时也是一个配置服务器,它解决了两个问题:

        1.服务A如何发现服务B

        2.管理微服务的配置

    2.搭建Nacos Server

    2.1  环境准备

      Nacos依靠java环境运行,搭建Nacos Server,需要配置maven环境,版本环境要求如下:

        1、64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac
        2、64 bit JDK 1.8+
        3、Maven 3.2.x+

    2.2 服务端获取

      Nacos提供了两种方式获取Nacos的服务端:

        1、源码下载编译

        2、下载 Release 包

    2.2.1 源码下载编译

      在你需要安装的地址下,执行:git clone https://github.com/alibaba/nacos.git

      将源码下载到本地之后,进入源码目录:cd nacos

        

       执行命令:mvn -Prelease-nacos clean install -U

        

      进入启动命令:cd distribution/target/nacos-server-1.1.3/nacos/bin/

    2.2.2 下载 Release 包

      从这个网址下载nacos-server-$version.zip 包,执行解压缩命令:unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
      进入命令执行页面:  cd nacos/bin

    2.3 启动服务器

      Lunix系统:

        启动命令(standalone代表着单机模式运行,非集群模式):
          sh startup.sh -m standalone


        如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
          bash startup.sh -m standalone

      Windows系统:

        启动命令:
          cmd startup.cmd

        或者双击startup.cmd运行文件

      启动成功后

        

       打开浏览器输入:http://127.0.0.1:8848/nacos,进入nacos可视化控制页面,账号密码默认nacos。

        

     3. 将应用注册到Nacos

      首先,在加依赖,在dependencies中添加

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

      然后,修改配置(server-addr不要加http或者https前缀,直接主机名/IP/域名 + 端口号就可以了)

    spring:
      cloud:
        nacos:
          discovery:
            # 指定nacos server地址
            server-addr: localhost:8848
      application:
        name: study01

     

      启动服务,打开Nacos Server控制台,可以看见刚刚启动的服务已经注册成功。  

    PS:对于Nacos Server版本与Nacos Client版本对应问题:

      应用集成Nacos Client从而和Nacos Server通信,我们通过查看spring-cloud-alibaba-dependencies文件中使用了哪个Nacos Client版本,下载相同版本的Nacos Server版本即可。

        

      可以看见我当前版本的Spring Cloud Alibaba使用的Nacos Client版本为1.1.1,由于Nacos没有提供Nacos server1.1.1版本包,所以我直接使用了Nacos server1.1.3。

      

    4.服务间调用

      如何在服务A中调用服务B的请求,分为两步进行:

      1.获取服务B的URL,因为考虑到服务B可能部署在多个服务器,或者更换升级服务器,所以不能够直接写死URL,我们利用DiscoveryClient接口动态的获取服务B的URL

    import org.springframework.cloud.client.discovery.DiscoveryClient;
    
    private final DiscoveryClient discoveryClient;
    
    // 服务B所有示例的信息
    List<ServiceInstance> instances = discoveryClient.getInstances("服务B");
    String targetURL = instances.stream()
            .map(instance -> instance.getUri().toString() + "/***/***")
            .findFirst()
            .orElseThrow(() -> new IllegalArgumentException("当前示例不存在"));

      2.调用服务B的请求,我们使用RestTemplate接口完成这一操作

    import org.springframework.web.client.RestTemplate;
    
    private final RestTemplate restTemplate;
    
    Demo forObject = restTemplate.getForObject(targetURL, Demo.class, "请求参数");

    5.服务发现的领域模型

    5.1 领域模型有哪些,有什么作用?

          

       关于领域模型,可以通过上图来理解:

        最大的是Namespace(命名空间),Nacos默认的命名空间是public,Namespace主要用来实现隔离。比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。

          

        Namespace之下是Group(分组),Nacos默认Group是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去,Group可以方便我们的管理。

          

         Group之下是Service,就是我们所谓的微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分,比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。最后是Instance,就是微服务的示例。

         

     5.2 如何指定领域模型

      首先在控制台新建一个命名空间

        

        

       创建成功之后得到了一个UUID,将此UUID配置在配置文件中(一定要配置UUID,而不是命名空间名称),同时配置集群名称:

    spring:
      cloud:
        nacos:
          discovery:
            # 指定nacos server地址
            server-addr: localhost:8848
            namespace: ab9783a7-dade-4da3-9abf-5cb2f5c52d59
            cluster-name: HZ

      可以在控制台查看到,多出了一个dev命名空间

        

       服务中也多出了一个HZ集群

        

    6. 元数据

      Nacos数据(如配置和服务)描述信息,如服务版本、权重、容灾策略、负载均衡策略、鉴权配置、各种自定义标签 (label),从作用范围来看,分为服务级别的元信息、集群的元信息及实例的元信息。

    6.1 元数据的作用

      1、提供描述信息

      2、让微服务的调用更加灵活

        微服务版本控制

    6.2 如何配置元数据

      1、控制台设置(key-value形式)

      2、配置文件配置

    spring:
      cloud:
        nacos:
          discovery:
        # 元数据 metadata: target-version: v1
  • 相关阅读:
    C++ 虚函数表解析
    Zend Studio使用
    Java的位运算符具体解释实例——与(&amp;)、非(~)、或(|)、异或(^)
    史上最简单的Hibernate入门简单介绍
    Ubuntu下很给力的下载工具
    hdu1698 Just a Hook 线段树:成段替换,总区间求和
    STL vector使用方法介绍
    Linux守护进程的编程实现
    PDO--PHP Data Objects
    经常使用的android弹出对话框
  • 原文地址:https://www.cnblogs.com/fx-blog/p/11685062.html
Copyright © 2011-2022 走看看