1104nacos:

一.下载nacos的压缩包并解压

 进入如下bin目录

启动nacos

 浏览器访问:

http://192.168.104.24:8848/nacos/index.html

 成功访问:

 将服务注册到nacos注册中心中:

  1. 加入springcloud阿里巴巴的依赖
    1. <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>cloud1103</groupId>
          <artifactId>cloud1103</artifactId>
          <packaging>pom</packaging>
          <version>1.0-SNAPSHOT</version>
          <modules>
              <module>order-service</module>
              <module>user-service</module>
              <module>eureka-service</module>
              <module>swagger1103</module>
          </modules>
      
          <!--1.作为一个boot项目,需要一个指定父级-->
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.3.9.RELEASE</version>
              <relativePath />
          </parent>
          <!--3.版本信息控制-->
          <properties>
              <java.version>1.8</java.version>
              <spring-cloud.version>Hoxton.SR10</spring-cloud.version>
              <mysql.version>5.1.47</mysql.version>
              <mybatis.version>2.1.1</mybatis.version>
              <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
          </properties>
      
      
          <!--2.cloud的依赖管理,并不是直接引入依赖-->
          <dependencyManagement>
              <dependencies>
                  <!--springcloud-->
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>${spring-cloud.version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
                  <!--alibaba-->
                  <dependency>
                      <groupId>com.alibaba.cloud</groupId>
                      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                      <version>${spring-cloud-alibaba.version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
                  <!--mysql-->
                  <dependency>
                      <groupId>mysql</groupId>
                      <artifactId>mysql-connector-java</artifactId>
                      <version>${mysql.version}</version>
                  </dependency>
                  <!--mybatis-->
                  <dependency>
                      <groupId>org.mybatis.spring.boot</groupId>
                      <artifactId>mybatis-spring-boot-starter</artifactId>
                      <version>${mybatis.version}</version>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
      
      </project>
      

  2. 在两个子模块的服务当中注释掉eureka的依赖,加上nacos的依赖
    1. <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <parent>
              <artifactId>cloud1103</artifactId>
              <groupId>cloud1103</groupId>
              <version>1.0-SNAPSHOT</version>
          </parent>
          <modelVersion>4.0.0</modelVersion>
      
          <artifactId>user-service</artifactId>
      
          <properties>
              <maven.compiler.source>8</maven.compiler.source>
              <maven.compiler.target>8</maven.compiler.target>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
              <!--mysql,mybatis:父级我们已经进行了版本限定,所以我们在这里只需要引入,不需要指定版本-->
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.mybatis.spring.boot</groupId>
                  <artifactId>mybatis-spring-boot-starter</artifactId>
              </dependency>
              <!--eureka客户端-->
             <!-- <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                  <version>2.2.7.RELEASE</version>
              </dependency>-->
      
              <!--nacos客户端-->
              <dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      

  3. 在核心配置文件当中注掉eureka的服务,在生spring的层级下,加上nacos注册中心
    1. server:
        port: 8083
      
      spring:
        datasource:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://192.168.8.171:3306/t_order?characterEncoding=utf8&useSSL=false
          username: root
          password: root
        application:
          name: orderservice    # 服务名称
        cloud:
          nacos:
            server-addr: http://localhost:8848
        #autoconfigure:
          #exclude: org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
      
      mybatis:
        type-aliases-package: com.pro.domain
        configuration:
          map-underscore-to-camel-case: true
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      
      # 将user服务加进注册中心
      #eureka:
      #  client:
      #    service-url:
      #      defaultZone: http://127.0.0.1:10086/eureka
      
      
      

  4. 启动报错:
    1. 解决
  5. 然后我们现在启动两个服务,进入刚刚的注册中心客户端去观察是否已经加入到注册中心当中了
    1. 观察到两个服务实例都加入到注册中心了

  二.两个集群多服务:

  1.  
  2. 我们就可以看到现在是在默认的集群当中
  3. 那么我们在大型的项目当中肯定是需要将集群进行划分的,现在我们就集群划分,进行多服务
    1. 将user服务加入杭州这个集群,并且克隆一个服务8085,此时就可以看到杭州集群当中有两个用户服务的实例了
    2. 在开一台用户服务加入到上海集群,先在yml文件当中修改集群名称,端口号为8086
      1. 就可以发现,我们的用户服务,在上海集群当中也有一台实例在运行啦
    3. 类似的,我们把调用者,订单服务也划分到杭州集群当中
    4. 然后,我们观察用户服务实例之间是否负载均衡,我们通过调用订单服务,去观察订单服务中,去调用用户服务的时候,调用的是哪一个集群的哪个实例当中的服务:正常情况下,是不会调用上海集群当中的服务的,因为我们订单服务也是在杭州集群当中,但是我们用上面那种方式多开实例,一直测试不对劲,同样的也可以访问,然后我们就直接修改yml文件的端口号来创建多实例来测试,但是还是不对
      1. 最后发现负载均衡测试不成功,是因为在订单服务的启动类当中,没有指定是哪个集群下的服务负载均衡,因此他默认是所有的实例之间负载均衡,因此我们需要在订单服务的配置文件当中配置(优先同集群调用,需要设置)
      2. #优先同集群调用,要设置
        userservice:
          ribbon:
            NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #定义负载均衡规则
      3. 通过测试,我们加上这个配置之后,就可以发现,上海的实例不会被调用服务了

      4. 跨集群调用成功

    5. 权重测试

      1. 经过测试,权重越小,服务被调用的越少
    6. 配置文件更新1
      1. 将两个服务的集群注掉,恢复默认,之前是为了讲解加上的

三.现在我们来对eureka和nacos进行对比

  1. 概念:
    1. 临时实例:用心跳来监测,向注册中心发信号,服务主动告知nacos自己是否健康
      1. 如果服务停止,注册中心当中就立马没有这个实例了
    2. 非临时实例:nacos主动询问服务是否健康存在
      1. 启动服务之后,再关闭服务,可以发现服务停止了,注册中心当中依然是有这个服务的(仍然可以看到),只不过不是健康的(健康的实例会减少
      2. 如何设置为非临时实例:
    3.  
  2. eureka,nacos两个注册中心对比:
    1. 相同点:
      1. 都是注册,拉取
      2. 都支持服务提供者用心跳方式做健康检查
    2. 不同点:
      1. nacos支持服务端主动检测提供者的状态,临时实例用心跳模式,非临时实例用主动检测
      2. 临时实例如果不正常心跳,会被踢掉,,非临时实例不会
      3. nacos支持服务列表变更时的消息推送模式

猜你喜欢

转载自blog.csdn.net/qq_60555957/article/details/127682072
今日推荐