谷粒商城02 spring cloud Alibaba
1.修改spring boot的版本
修改版本与项目的版本一致,防止springboot cloud alibaba冲突 手动修改版本号更新maven会不起作用可以invalidate cache
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.1.8.RELEASE</version>
</parent>
2.引入spring cloud Alibaba
在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>
3.nacos注册中心
先在common引入注册中心发现
<!-- 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
下载nacos最新版的会出错,选择1.4版本,而且打开不是直接双击bin文件下的startup.sh 是通过该.\startup.cmd -m standalone启动,还得记得给每个微服务配置一个端口
配置给每个微服务指定注册中心地址以及服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: guli-coupon
在启动类开启服务注册与发现
@EnableDiscoveryClient
4.利用openfeign远程调用
基于http的
使用步骤
- 导入openfeign的依赖
- 开启@EnableFeignClients
- 编写接口远程调用
5.使用openfeign调用例子
先配置openfeign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
member调用coupon的例子
首先在coupon开发一个被调用的接口,coupon模块只需要继承openfeign的依赖即可
//在CouponController写了个测试接口
@RequestMapping("/test")
public R test(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满一千减500");
return R.ok().put("name",Arrays.asList(couponEntity));
}
其次在member模块中调用这个接口
因为是调用其它模块的,所以最好建个feign的文件夹专门调用
//在新建文件夹下写CouponFeignService
@FeignClient("guli-coupon") //注册中心的名字
public interface CouponFeignService {
//直接在coupon模块的方法名和请求链路和方式直接拷贝
@RequestMapping("coupon/coupon/test")
public R test();
}
再次修改memberController,添加一个测试方法
@RequestMapping("test")
public R test(){
MemberEntity soup = new MemberEntity();
soup.setNickname("汤");
R test = couponFeignService.test();//获取到优惠卷
return R.ok().put("name",soup).put("coupon",test.get("coupons"));
}
最后在member启动文件中添加@EnableFeignClients(“com.atguigu.gulimail.member.feign”)
扫描到接口的加入spring容器吧?
访问接口,间接调用coupon
http://localhost:7001/member/member/test
返回数据
{
"msg": "success",
"code": 0,
"coupon": [
{
"id": null,
"couponType": null,
"couponImg": null,
"couponName": "满一千减500",
"num": null,
"amount": null,
"perLimit": null,
"minPoint": null,
"startTime": null,
"endTime": null,
"useType": null,
"note": null,
"publishCount": null,
"useCount": null,
"receiveCount": null,
"enableStartTime": null,
"enableEndTime": null,
"code": null,
"memberLevel": null,
"publish": null
}
],
"name": {
"id": null,
"levelId": null,
"username": null,
"password": null,
"nickname": "汤",
"mobile": null,
"email": null,
"header": null,
"gender": null,
"birth": null,
"city": null,
"job": null,
"sign": null,
"sourceType": null,
"integration": null,
"growth": null,
"status": null,
"createTime": null
}
}
6.配置中心
首先引入配置中心依赖到common模块
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在bootstrap.properties设置配置中心的名字和地址,他优先于application.yml启动
spring.application.name=gulimail-member #配置中心名字
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #配置中心地址
在模块中随意写一些配置,并使用 以 application.properties
格式
member.user.name=soup
member.user.age=26
在controller中使用这些配置
//使用的类名前添加,动态刷新配置
@RefreshScope
@Value("${member.user.name}")
String name;
@Value("${member.user.age}")
int age;
要动态的修改配置信息,需要查看日志输出的
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='gulimail-coupon.properties'}]}
查看到name在配置中心新建一个gulimail-coupon.properties会自动连接到项目的application.properties配置中即可动态修改
7.命名空间与配置分组
命名空间
配置隔离 不同的命名空间下,可以存在相同的Group 或Data ID 配置 就是开发环境有开发的配置,测试有测试的,也可以针对的设置对微服务的命名空间,每个微服务都有一个对应的命名空间
配置分组
每个命名空间下可以设置不同的分组,用于针对不通场景使用
配置中心配置分组
输出情况
8.加载多配置集
删除了原有的配置application.yml配置集合,分割配置信息到配置中心
#bootstrap.properties配置
spring.application.name=gulimail-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=fc56b6c4-9f1d-4387-96b1-e5239454abf1
#把这行注释了话那么会优先选择项目内的文件而不会匹配到nacos的
spring.cloud.nacos.config.group=dev
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
查看是否在配置中心使用分割后的
9.网关
网关的作用
网关工作原理
断言 predicates This lets you match on anything from the HTTP request, such as headers or parameters
路由规则routes:断言处理给特定路由
filter:符合路由规则则设定过滤
创建网关模块
加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
在application.yml配置网关
spring:
cloud:
gateway:
routes:
- id: test_route
uri: http://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
再配置nacos的注册中心和配置中心以及设置注册发现启动访问
http://localhost:88/?url=baidu //路由跳转到百度