栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-08:引入Nacos服务注册中心与配置中心

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微服务】SpringCloud(SpringCloud Alibaba)微服务秒杀项目-08:引入Nacos服务注册中心与配置中心

文章目录
  • SpringCloud-08: 引入Nacos服务注册中心与配置中心
    • 注册中心
      • 服务提供者
      • 服务消费者(客户端)
    • 微服务配置中心
      • 基础配置
      • 分类配置
        • 根据DataID分类配置
        • 根据Group分类配置
        • 根据NameSpace分类配置

SpringCloud-08: 引入Nacos服务注册中心与配置中心

项目Github地址

Nacos官方文档

SpringCloud Alibaba 官方文档

SpringCloud Config 官方文档

注册中心 服务提供者
  • 新建子工程,该工程使用nacos作为服务配置中心

  • 引入pom.xml依赖

    
    
        
            seckill
            cc.seckill
            1.0-SNAPSHOT
        
        4.0.0
    
        cloud-config-nacos-client3377
    
        
            8
            8
        
    
    
        
            
            
                cc.seckill
                cloud-api-commons
                ${project.version}
            
    
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
            
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
    
            
                org.projectlombok
                lombok
                true
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
    
    
    

    !!!我这里父项目没注意依赖整错了,记得修改父项目的依赖!!!

                
                
                    com.alibaba.cloud
                    spring-cloud-alibaba-dependencies
                    2021.0.1.0
                    pom
                    import
                
    
  • application.yml

    server:
      port: 9001
    
    
    spring:
      application:
        name: nacos-payment-provider
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
  • 主启动类

    package cc.seckill.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class PaymentMain {
        public static void main(String[] args) {
            SpringApplication.run(PaymentMain.class, args);
        }
    }
    
    
  • Controller

    package cc.seckill.springcloud.controller;
    
    import cc.seckill.springcloud.entities.Result;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    
    
    @RestController
    @Slf4j
    public class PaymentController {
        @Value("${server.port}")
        private String serverPort;
    
        @GetMapping("/payment/nacos/get/{id}")
        public Result getPayment(@PathVariable("id") Long id) {
            Result result = new Result();
            result.put("code", "200");
            result.put("data", id);
            result.put("port", serverPort);
            return result;
        }
    
    }
    
    
  • 启动测试

  • nacos管理后台

  • 再添加一个yml,以启动两个服务

    server:
      port: 9002
    
    
    spring:
      application:
        name: nacos-payment-provider
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
    
    management:
      endpoints:
        web:
          exposure:
            include: '*'
    
    
  • 再次启动查看,说明配置成功

服务消费者(客户端)
  • 新建项目,不再过多阐述,只放配置代码

  • pom

    
    
        
            seckill
            cc.seckill
            1.0-SNAPSHOT
        
        4.0.0
    
        cloud-consumer-nacos-order80
    
        
            8
            8
        
    
        
    
            
            
                org.springframework.cloud
                spring-cloud-starter-loadbalancer
            
    
    
    
            
            
                cc.seckill
                cloud-api-commons
                ${project.version}
            
    
    
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
            
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
    
            
                org.projectlombok
                lombok
                true
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
    
    
  • yml

    server:
      port: 80
    
    
    spring:
      application:
        name: nacos-order-consumer
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
    
  • Main

    package cc.seckill.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class OrderMain {
        public static void main(String[] args) {
            SpringApplication.run(OrderMain.class, args);
        }
    }
    
    
  • config

    package cc.seckill.springcloud.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    
    @Configuration
    public class ApplicationContextConfig {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }
    
  • Controller

    package cc.seckill.springcloud.controller;
    
    import cc.seckill.springcloud.entities.Result;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    import javax.annotation.Resource;
    
    
    @RestController
    @Slf4j
    public class OrderNacosController {
    
        @Resource
        private RestTemplate restTemplate;
    
        @Value("${service-url.nacos-user}")
        private String serverURL;
    
    
        @GetMapping("/consumer/payment/nacos/get/{id}")
        public Result paymentInfo(@PathVariable("id") Long id) {
            return restTemplate.getForObject(serverURL + "/payment/nacos/get/" + id,
                    Result.class);
        }
    
    }
    
  • 启动

  • 测试

微服务配置中心 基础配置
  • 创建项目

  • 引入pom.xml依赖

    
    
        
            seckill
            cc.seckill
            1.0-SNAPSHOT
        
        4.0.0
    
        cloud-config-nacos-client3377
    
        
            8
            8
        
    
    
        
            
                org.springframework.cloud
                spring-cloud-starter-bootstrap
            
    
            
            
                cc.seckill
                cloud-api-commons
                ${project.version}
            
    
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-discovery
            
    
    
            
            
                com.alibaba.cloud
                spring-cloud-starter-alibaba-nacos-config
            
    
    
            
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                org.springframework.boot
                spring-boot-starter-actuator
            
    
            
            
                org.springframework.boot
                spring-boot-devtools
                runtime
                true
            
    
            
                org.projectlombok
                lombok
                true
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
            
        
    
    
    
    
  • 新建bootstrap.yml和application.yml

    bootstrap.yml加载优先级要高于application.yml

    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
          config:
            server-addr: localnacos:8848
            file-extension: yaml
    
    

    application.yml

    spring:
      profiles:
        active: dev
    
    
  • Controller

    package cc.seckill.springcloud.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    
    @RestController
    @RefreshScope
    public class ConfigClientController {
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/config/info")
        public String getConfigInfo() {
            return configInfo;
        }
    }
    
  • 配置文件名称规则

    在 Nacos Spring Cloud 中,dataId 的完整格式如下:

    ${prefix}-${spring.profiles.active}.${file-extension}
    
    • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

    来源: Nacos官网

    因此当前配置文件的名称应该为:nacos-config-client-dev.yaml

  • 在nacos管理界面新建配置 (配图里的文件名是错的,注意!)

  • 测试

分类配置
  • NameSpace + Group + Data ID来区分配置,类似java类的包名+类名来提供全限定名。

    NameSpace区分部署环境,Group、Data ID进行逻辑区分

    比如我们有三个环境:开发、测试、成产环境,我们就可以创建三个NameSpace,不同的NameSpace之间是相互隔离的。Group可以将不同的微服务划分到同一个Group里,Data ID可以用来区分微服务。

根据DataID分类配置
  • 修改配置文件application.yml中spring.profiles.active的值进行分类配置

    spring:
      profiles:
        active: test
    #    active: dev
    

根据Group分类配置
  • 添加配置

  • 修改bootstrap.yaml(yaml和yml作用一样的),在config下添加group信息

    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
          config:
            server-addr: localnacos:8848
            file-extension: yaml
            group: TEST_GROUP
    

    同样修改application.yaml

    spring:
      profiles:
        active: info
    #    active: test
    #    active: dev
    
  • 测试

根据NameSpace分类配置
  • 去命名空间新建NameSpace,然后在配置管理界面切换到对应的命名空间

  • 修改bootstrap.yaml

    server:
      port: 3377
    
    spring:
      application:
        name: nacos-config-client
    
      cloud:
        nacos:
          discovery:
            server-addr: localnacos:8848
    
          config:
            server-addr: localnacos:8848
            file-extension: yaml
    #        group: TEST_GROUP
            namespace: 9fdb67b6-7d0d-4684-a1a2-bd2af588190d
    
    

    group可以不注释掉,但是需要和配置文件的group一致,因为我上面选的是DefaultGroup,所以直接注释掉了。

  • 测试

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/825914.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号