谷粒商城项目(学习笔记一)
谷粒商城项目(学习笔记二)
谷粒商城项目(学习笔记三)
谷粒商城项目(学习笔记四)
谷粒商城项目(学习笔记五)
第三章:分布式部署
4.启动微服务和nacos的server,访问测试是否注册成功。
1.引入nacos-config包,最好和上面的discovery一起引入
3.在nacos的配置管理中添加配置集(名字为:服务名.properties)
一、引入spring-cloud-alibaba
根据自己的版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub,引入需要的版本
我这里是2021.1版的
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二、配置Nacos注册中心discovery
1.在gulimall-common中引入nacos
这里官网巨坑,discovery在第官网目录的第二行
<!-- 服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在需要注册的微服务的yaml文件中配置
spring:
application:
name: nacos-config-member(你的服务名)
cloud:
nacos:
server-addr: 127.0.0.1:8848(nacos的地址和端口)3.配置微服务能够应用nacos
在微服务的主启动类上加入
@EnableDiscoveryClient4.启动微服务和nacos的server,访问测试是否注册成功。
http://localhost:8848/nacos
http://localhost:8848/nacos
如果端口被占用了,可以看看这篇文章
端口被占用,如何释放端口_沙滩的流沙520的博客-CSDN博客_端口被占用
netstat -ano|findstr 被占用端口号
taskkill /t /f /im 被占用端口号对应的TCP号
三、配置Nacos配置中心Config
1.引入nacos-config包,最好和上面的discovery一起引入
<!-- 配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>2.创建bootstrop.properties文件
配置nacos中一些优先级较高的配置如:
spring.application.name=gulimall-coupon
spring.cloud.nacos.server-addr=localhost:8848如果bootstrop.properties文件无效,需要引入下面依赖:
<!-- 启动获取配置中心配置 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.2</version>
</dependency>3.在nacos的配置管理中添加配置集(名字为:服务名.properties)

4.动态获取配置
为controller添加@RefreshScope注解,动态获取配置集

5.测试
1)访问:http://localhost:7000/coupon/coupon/test
得到了姓名和年龄

2)修改配置集中的参数
参数改变
![]()
则配置中心部署成功。
6.将数据配置到配置中心中
如果配置中心和当前项目中都配置了同一个参数,优先使用配置中心的配置
着重注意config和discovery的参数问题,和namespace,group的配置:
生产,运行,测试环境空间互相隔离:dev ,prod , test
命名空间配置示例:

1)将application.yaml配置到配置中心中,可以将其拆分为3个部分数据源部分,mybatis部分和其他部分。

具体情况如下



2)将application.yaml注释掉,运行微服务,发现成功运行。
所以所有的配置都可以配置到配置中心
四、远程调用Openfeign
1.引入Openfeign
注意版本问题,需要引入loadbalancer
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
如果版本过高还需要引入loadbalancer,因为可能移除了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>2.建feign接口包
在需要引入远程调用的微服务中新建feign包,并创建需要的feign接口
#示例
@FeignClient("gulimall-coupon") #微服务名
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list") #controller路径
public R membercoupons();
}
必须为接口指定调用的微服务,在注册中心的名字和完整的路径。
3.测试接口
1)在CouponController中写入模拟返回的优惠卷信息
#模拟返回的优惠卷信息
/**
* 返回成员所有优惠券
*/
@RequestMapping("/member/list")
public R membercoupons(){
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100减10");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}2)在MemberController中模拟调用获得成员优惠卷
@Autowired
CouponFeignService couponFeignService;
#测试返回成员的优惠卷,成员微服务,调用优惠卷微服务
@RequestMapping("/membercoupon")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三"); #模拟成员
R membercoupons = couponFeignService.membercoupons(); #调用feign
return
R.ok().put("member",memberEntity).put("coupon",membercoupons.get("coupons")); #返回测试结果
}3)为MemberApplication添加引入feign注释
@EnableFeignClients("com.yangyan.gulimall.member.feign") #注释
@EnableDiscoveryClient
@MapperScan("com.yangyan.gulimall.member.dao")
@SpringBootApplication
public class MemberApplication {
public static void main(String[] args) {
SpringApplication.run(MemberApplication.class, args);
}
}
4)访问http://localhost:8000/member/member/membercoupon得到结果

五、Gateway网关
1.新建Gateway的Module
选择好Gateway,然后调整一下项目结构

2.引入gulimall-common
添加bootstrap.properties,将网关注册到nacos中并配置服务名和命名空间。
spring.application.name=gulimall-gateway
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=239a47f0-64c2-40ba-ba08-319eb4ac1c96
spring.cloud.nacos.discovery.group=dev
spring.cloud.nacos.config.namespace=239a47f0-64c2-40ba-ba08-319eb4ac1c96
spring.cloud.nacos.config.group=dev
#将网关端口分配为88
server.port=88启动项目发现错误如下

因为common中有mybatis,而网关没有配置数据源,所以排除数据源配置
@EnableDiscoveryClient
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) #核心
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}重新配置成功,部署。
3.网关的调试
在application.yaml中配置跳转qq和百度的
具体的配置可以看Spring Cloud Gateway和Spring Cloud Greenwich 中文文档 参考手册 中文版
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,qq4.测试成功
