注册中心、配置中心、网关搭建

注册中心、配置中心、网关搭建_第1张图片

测试注册中心

common 模块引入依赖

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.1.0.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

配置文件

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon

启动类添加注解 @EnableDiscoveryClient ,启动服务访问localhost:8848/nacos,其他模块同理

测试远程调用

会员服务 gulimall-member 引入依赖

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-openfeignartifactId>
        dependency>

在优惠券 coupon 模块下 CouponController 中,写一个 membercouons 方法好让 member 模块远程调用

    // 模拟数据测试远程调用
    @RequestMapping("/member/list")
    public R membercouons() {
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

在会员服务 member 模块中 feign 包下,创建一个接口,把要调用的方法的完整签名直接复制过来再补全路径

@FeignClient("gulimall-coupon") // 声明调用 gulimall-coupon 模块
public interface CouponFeignService {

    @RequestMapping("/coupon/coupon/member/list") 
    public R membercouons();

}

在启动类上添加注解

@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")

在 MemberController 类中测试调用,启动两个服务后

    @Autowired
    CouponFeignService couponFeignService;

    @RequestMapping("/coupons")
    public R test() {
        MemberEntity memberEntity = new MemberEntity();
        memberEntity.setNickname("张三");
        R membercoupons = couponFeignService.membercouons();
        return R.ok().put("member", memberEntity).put("coupons", membercoupons.get("coupons"));
    }

地址栏中输入 http://localhost:8000/member/member/coupons 回显数据

在这里插入图片描述

测试配置中心

common 模块引入依赖

 <dependency>
     <groupId>com.alibaba.cloudgroupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
 dependency>

coupon 模块创建bootstrap.properties 配置文件,它会优先于 application.yml 文件加载

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

controller 添加注解 @RefreshScope 动态刷新

    @Value("${coupon.user.name}")
    private String name;
    
    @Value("${coupon.user.age}")
    private Integer age;
    
    @RequestMapping("/test")
    public R test() {
        return R.ok().put("name", name).put("age", age);
    }

启动服务,控制台会打印这句话
Located property source: CompositePropertySource {name=‘NACOS’, propertySources=[NacosPropertySource {name=‘gulimall-coupon.properties’}]},这个名字 gulimall-coupon.properties 就是我们在配置中心创建配置的 ID
注册中心、配置中心、网关搭建_第2张图片
浏览器地址栏输入 http://localhost:7000/coupon/coupon/test 测试结果
注册中心、配置中心、网关搭建_第3张图片

命名空间

命名空间:配置隔离;

默认:public(保留空间);默认新增的所有配置都在public空间。开发,测试,生产:利用命名空间来做环境隔离。

注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871

微服务众多,每一个微服务里面有很多的配置,所以可以基于每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置

配置分组

不同的环境可以使用不同的配置组

同时加载多个配置集
微服务任何配置信息,任何配置文件都可以放在配置中心中
只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可

coupon 命名空间下新建配置,都在 dev 分组里面
注册中心、配置中心、网关搭建_第4张图片
bootstrap.properties 定义加载多个配置文件

spring.application.name=gulimall-coupon

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=7733bc90-42c3-4546-90ec-eeb5a3095fcc

spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true

spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true

spring.cloud.nacos.config.ext-config[2].data-id=other.yml
spring.cloud.nacos.config.ext-config[2].group=dev
spring.cloud.nacos.config.ext-config[2].refresh=true

启动服务,控制台打印输出加载成功
在这里插入图片描述
微服务可以只保留一个 bootstrap.properties,让它自动去配置中心获取配置就好

测试网关

路由、断言、过滤器
注册中心、配置中心、网关搭建_第5张图片

创建一个模块作为 api 网关,修改 springboot 和 sringcloud 版本,引入 common 依赖,启动类添加 @EnableDiscoveryClient

nacos 创建网关的配置命名空间
注册中心、配置中心、网关搭建_第6张图片
创建 bootstrap.properties 配置文件

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=9bb6b147-470c-4ab8-a722-461c26800fd4

网关不需要数据源,启动类排除和数据源相关的配置

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

application.yml 配置断言,满足 predicates 规则就可以去到 uri

spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_route
          uri: https://www.qq.com
          predicates:
            - Query=url,qq

浏览器地址栏输入 http://localhost:88/?url=qq 就可以跳转到 qq 首页

你可能感兴趣的:(谷粒商城,java)