zoukankan      html  css  js  c++  java
  • 【SpringCloud】Spring Cloud Alibaba 之 Nacos注册中心(二十七)

      Nacos基本概念,请参考:【SpringCloud】Spring Cloud Alibaba 及 Nacos介绍(二十六) 

      本章介绍,使用搭建以Nacos为注册中心的SpringCloud项目

    搭建Nacos服务

      1、下载nacos,地址https://github.com/alibaba/nacos/releases

        本例使用的是nacos 1.2.1版本,下载得到nacos-server-1.2.1.tar.gz压缩包

      2、解压文件nacos-server-1.2.1.tar.gz,进入目录,查看目录内容

        

      3、使用命令启动nacos服务

        命令:sh ./bin/startup.sh -m standalone

      4、浏览器访问地址:http://localhost:8848/nacos

         

      5、输入默认用户名/密码(nacos/nacos)

        

    搭建服务提供者

      1、新建一个工程(test-springcloud),导入Spring Cloud Alibaba依赖

    1 <!-- spring cloud alibaba -->
    2 <dependency>
    3     <groupId>com.alibaba.cloud</groupId>
    4     <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    5     <version>${spring-cloud-alibaba.version}</version>
    6     <type>pom</type>
    7     <scope>import</scope>
    8 </dependency>

      完整pom如下:

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <project xmlns="http://maven.apache.org/POM/4.0.0"
      3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      5     <modelVersion>4.0.0</modelVersion>
      6 
      7     <groupId>com.test</groupId>
      8     <artifactId>test-springcloud</artifactId>
      9     <version>1.0-SNAPSHOT</version>
     10     <packaging>pom</packaging>
     11     <!-- 统一管理jar包版本 -->
     12     <properties>
     13         <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
     14         <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
     15         <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
     16         <mybatis-spring-boot.version>2.1.2</mybatis-spring-boot.version>
     17         <mysql.version>8.0.12</mysql.version>
     18         <druid.version>1.1.21</druid.version>
     19         <lombok.version>1.18.12</lombok.version>
     20         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     21         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     22         <java.version>1.8</java.version>
     23     </properties>
     24 
     25 
     26     <!-- 依赖管理:子模块继承后,提供作用:锁定版本 + 子module 不用写 version -->
     27     <dependencyManagement>
     28         <dependencies>
     29             <!-- spring boot -->
     30             <dependency>
     31                 <groupId>org.springframework.boot</groupId>
     32                 <artifactId>spring-boot-dependencies</artifactId>
     33                 <version>${spring-boot.version}</version>
     34                 <type>pom</type>
     35                 <scope>import</scope>
     36             </dependency>
     37             <!-- spring cloud -->
     38             <dependency>
     39                 <groupId>org.springframework.cloud</groupId>
     40                 <artifactId>spring-cloud-dependencies</artifactId>
     41                 <version>${spring-cloud.version}</version>
     42                 <type>pom</type>
     43                 <scope>import</scope>
     44             </dependency>
     45             <!-- spring cloud alibaba -->
     46             <dependency>
     47                 <groupId>com.alibaba.cloud</groupId>
     48                 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
     49                 <version>${spring-cloud-alibaba.version}</version>
     50                 <type>pom</type>
     51                 <scope>import</scope>
     52             </dependency>
     53 
     54             <!-- mybatis -->
     55             <dependency>
     56                 <groupId>org.mybatis.spring.boot</groupId>
     57                 <artifactId>mybatis-spring-boot-starter</artifactId>
     58                 <version>${mybatis-spring-boot.version}</version>
     59             </dependency>
     60 
     61             <!-- mysql -->
     62             <dependency>
     63                 <groupId>mysql</groupId>
     64                 <artifactId>mysql-connector-java</artifactId>
     65                 <version>${mysql.version}</version>
     66             </dependency>
     67 
     68             <!-- druid -->
     69             <dependency>
     70                 <groupId>com.alibaba</groupId>
     71                 <artifactId>druid-spring-boot-starter</artifactId>
     72                 <version>${druid.version}</version>
     73             </dependency>
     74 
     75             <!-- lombok -->
     76             <dependency>
     77                 <groupId>org.projectlombok</groupId>
     78                 <artifactId>lombok</artifactId>
     79                 <version>${lombok.version}</version>
     80             </dependency>
     81 
     82             <!-- test -->
     83             <dependency>
     84                 <groupId>org.springframework.boot</groupId>
     85                 <artifactId>spring-boot-starter-test</artifactId>
     86                 <version>${spring-boot.version}</version>
     87                 <scope>test</scope>
     88                 <exclusions>
     89                     <exclusion>
     90                         <groupId>org.junit.vintage</groupId>
     91                         <artifactId>junit-vintage-engine</artifactId>
     92                     </exclusion>
     93                 </exclusions>
     94             </dependency>
     95         </dependencies>
     96     </dependencyManagement>
     97 
     98     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
     99     <build>
    100         <finalName>${project.artifactId}</finalName>
    101         <plugins>
    102             <plugin>
    103                 <groupId>org.springframework.boot</groupId>
    104                 <artifactId>spring-boot-maven-plugin</artifactId>
    105                 <version>${spring-boot.version}</version>
    106                 <configuration>
    107                     <fork>true</fork>
    108                     <addResources>true</addResources>
    109                 </configuration>
    110             </plugin>
    111         </plugins>
    112     </build>
    113 </project>
    pom.xml

      2、新建一个模块服务提供者(springcloud-provider-alibaba-payment9001),引入Nacos依赖

    1 <!-- alibaba nacos -->
    2 <dependency>
    3     <groupId>com.alibaba.cloud</groupId>
    4     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5 </dependency>

      完整pom如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <parent>
     6         <artifactId>test-springcloud</artifactId>
     7         <groupId>com.test</groupId>
     8         <version>1.0-SNAPSHOT</version>
     9     </parent>
    10     <modelVersion>4.0.0</modelVersion>
    11 
    12     <artifactId>springcloud-provider-alibaba-payment9001</artifactId>
    13 
    14     <dependencies>
    15 
    16         <!-- alibaba nacos -->
    17         <dependency>
    18             <groupId>com.alibaba.cloud</groupId>
    19             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    20         </dependency>
    21 
    22         <!-- spring boot -->
    23         <dependency>
    24             <groupId>org.springframework.boot</groupId>
    25             <artifactId>spring-boot-starter-web</artifactId>
    26         </dependency>
    27         <dependency>
    28             <groupId>org.springframework.boot</groupId>
    29             <artifactId>spring-boot-starter-actuator</artifactId>
    30         </dependency>
    31         <dependency>
    32             <groupId>org.springframework.boot</groupId>
    33             <artifactId>spring-boot-devtools</artifactId>
    34             <scope>runtime</scope>
    35             <optional>true</optional>
    36         </dependency>
    37         <dependency>
    38             <groupId>org.projectlombok</groupId>
    39             <artifactId>lombok</artifactId>
    40             <optional>true</optional>
    41         </dependency>
    42         <dependency>
    43             <groupId>org.springframework.boot</groupId>
    44             <artifactId>spring-boot-starter-test</artifactId>
    45             <scope>test</scope>
    46         </dependency>
    47 
    48     </dependencies>
    49 
    50 </project>
    pom.xml

      3、新建一个配置文件appliction.yml

     1 # 端口
     2 server:
     3   port: 9001
     4 
     5 spring:
     6   application:
     7     name: nacos-payment-provider
     8   cloud:
     9     nacos:
    10       discovery:
    11         server-addr: localhost:8848

      4、新建启动类

    1 @EnableDiscoveryClient
    2 @SpringBootApplication
    3 public class PaymentMain9001 {
    4     public static void main(String[] args) {
    5         SpringApplication.run(PaymentMain9001.class, args);
    6     }
    7 }

      5、新建一个Controller,如下:

     1 @RestController
     2 public class PaymentController {
     3 
     4     @Value("${server.port}")
     5     private String serverPort;
     6 
     7     @GetMapping(value = "/payment/nacos/{id}")
     8     public String getPayment(@PathVariable("id") Integer id) {
     9         return "nacos registry, serverPort: " + serverPort + "	 id: " + id;
    10     }
    11 }

      6、测试

        1)启动Nacos服务,启动服务提供者模块

        2)访问地址:http://localhost:9001/payment/nacos/11,正常获取内容

          

        3)访问Nacos的Web界面,查看服务列表菜单

          

          可以看到服务列表中,有nacos-payment-provider服务

    搭建服务消费者

      1、在父工程(test-springcloud)中,新建服务消费者模块(springcloud-consumer-alibaba-order7001)

      2、引入nacos依赖,同上

        完整pom如下:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0"
     3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     5     <parent>
     6         <artifactId>test-springcloud</artifactId>
     7         <groupId>com.test</groupId>
     8         <version>1.0-SNAPSHOT</version>
     9     </parent>
    10     <modelVersion>4.0.0</modelVersion>
    11 
    12     <artifactId>springcloud-consumer-alibaba-order7001</artifactId>
    13 
    14     <dependencies>
    15 
    16         <!-- alibaba nacos -->
    17         <dependency>
    18             <groupId>com.alibaba.cloud</groupId>
    19             <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    20         </dependency>
    21 
    22         <!-- spring boot -->
    23         <dependency>
    24             <groupId>org.springframework.boot</groupId>
    25             <artifactId>spring-boot-starter-web</artifactId>
    26         </dependency>
    27         <dependency>
    28             <groupId>org.springframework.boot</groupId>
    29             <artifactId>spring-boot-starter-actuator</artifactId>
    30         </dependency>
    31         <dependency>
    32             <groupId>org.springframework.boot</groupId>
    33             <artifactId>spring-boot-devtools</artifactId>
    34             <scope>runtime</scope>
    35             <optional>true</optional>
    36         </dependency>
    37         <dependency>
    38             <groupId>org.projectlombok</groupId>
    39             <artifactId>lombok</artifactId>
    40             <optional>true</optional>
    41         </dependency>
    42         <dependency>
    43             <groupId>org.springframework.boot</groupId>
    44             <artifactId>spring-boot-starter-test</artifactId>
    45             <scope>test</scope>
    46         </dependency>
    47 
    48     </dependencies>
    49 </project>
    View Code

      3、编写配置文件,如下:

     1 # 端口
     2 server:
     3   port: 7001
     4 
     5 spring:
     6   application:
     7     name: nacos-order-consumer
     8   cloud:
     9     nacos:
    10       discovery:
    11         server-addr: localhost:8848

      4、编写启动类,如下:

    1 @EnableDiscoveryClient
    2 @SpringBootApplication
    3 public class OrderMain7001 {
    4     public static void main(String[] args) {
    5         SpringApplication.run(OrderMain7001.class, args);
    6     }
    7 }

      5、编辑配置类,代码如下,注入RestTemplate

     1 @Configuration
     2 public class AppConfig {
     3 
     4     @Bean
     5     @LoadBalanced
     6     public RestTemplate restTemplate(){
     7         return new RestTemplate();
     8     }
     9 
    10 }

       6、编写一个Controller用于访问

    @RestController
    public class OrderController {
    
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping(value = "/consumer/payment/nacos/{id}")
        public String paymentInfo(@PathVariable("id") Integer id) {
            return restTemplate.getForObject("http://nacos-payment-provider" + "/payment/nacos/" + id, String.class);
        }
    
    }

      7、测试

        1)启动Nacos服务,启动服务提供者模块,启动服务消费者模块

        2)访问地址:http://localhost:9001/payment/nacos/11,正常获取内容

           访问地址:http://localhost:7001/consumer/payment/nacos/11,正常获取内容

          

        3)访问Nacos的Web界面,查看服务列表菜单,分别可以看到一个nacos-payment-provider服务,一个nacos-order-consumer服务

        4)在搭建一个(springcloud-provider-alibaba-payment9002)服务提供者模块,与9001模块内容相同,只有端口的区别

        5)启动9002模块,使用地址:http://localhost:7001/consumer/payment/nacos/11,访问获取内容

          获取的内容,是轮流从9001与9002这两个节点上获取

        6)访问Nacos的Web界面,查看服务列表菜单

          

  • 相关阅读:
    单元化架构 定义问题
    STGW 下一代互联网标准传输协议QUIC大规模运营之路 wentaomao 腾讯技术工程 2021-02-01
    string
    进程管理工具 源码分析
    etcd 鉴权体系架构由控制面和数据面组成。
    HTTP/2 是基于二进制而不是文本
    分布式 ID 解决方案
    减少重复开发,GraphQL在低代码平台如何落地? 原创 随刻信息流团队 爱奇艺技术产品团队 2021-01-29
    设计模式混编:观察者模式+中介者模式
    mysql 语法总结
  • 原文地址:https://www.cnblogs.com/h--d/p/12913518.html
Copyright © 2011-2022 走看看