测试注册中心
common 模块引入依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</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.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</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.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</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
浏览器地址栏输入 http://localhost:7000/coupon/coupon/test 测试结果
命名空间
命名空间:配置隔离;
默认:public(保留空间);默认新增的所有配置都在public空间。开发,测试,生产:利用命名空间来做环境隔离。
注意:在bootstrap.properties;配置上,需要使用哪个命名空间下的配置,
spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
微服务众多,每一个微服务里面有很多的配置,所以可以基于每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
配置分组
不同的环境可以使用不同的配置组
同时加载多个配置集
微服务任何配置信息,任何配置文件都可以放在配置中心中
只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
coupon 命名空间下新建配置,都在 dev 分组里面
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,让它自动去配置中心获取配置就好
测试网关
路由、断言、过滤器
创建一个模块作为 api 网关,修改 springboot 和 sringcloud 版本,引入 common 依赖,启动类添加 @EnableDiscoveryClient
nacos 创建网关的配置命名空间
创建 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 首页