赞
踩
spring cloud alibaba的github地址:https://github.com/alibaba/spring-cloud-alibaba
在common模块里引入依赖
对应版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.1.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在common模块里引入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
安装在windows上
双击bin目录里的startup.cmd即可启动服务
输入http://localhost:8848/nacos/进入nacos页面
默认用户名密码都是nacos
在gulimall-coupon里配置nacos的地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
还要设置服务名称
spring.application.name=gulimall-coupon
使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallCouponApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallCouponApplication.class, args);
}
}
启动gulimall-coupon,进入nacos页面查看服务是否注册成功
将其他几个服务按照同样的方法进行注册
1、修改application.yml
2、添加@EnableDiscoveryClient
注解
之前已经引入了
1、在coupon模块的CouponController.java下编写一个controller
@RequestMapping("/member/list")
public R memberCoupons() {
CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满100减10");
return R.ok().put("coupons", Arrays.asList(couponEntity));
}
2、在member模块下创建一个feign.CouponFeignService.java
接口
@FeignClient("gulimall-coupon") // 告诉springcloud要调用哪个服务
public interface CouponFeignService {
// 告诉springcloud要调用该服务的哪个方法
@RequestMapping("coupon/coupon/member/list")
public R memberCoupons();
}
3、在member的MemberController.java里创建测试方法
@Autowired
CouponFeignService couponFeignService;
@RequestMapping("/coupons")
public R test() {
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R memberCoupons = couponFeignService.memberCoupons();
return R.ok().put("member", memberEntity).put("coupons", memberCoupons.get("coupons"));
}
4、在member模块的主启动类上标注注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
5、重新启动member和coupon服务
坑:member服务启动报错No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
问题原因:
由于Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错.
解决方法:
加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <groupId>com.netflix.ribbon</groupId> <artifactId>ribbon</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-loadbalancer</artifactId> <version>2.2.2.RELEASE</version> </dependency>
6、浏览器输入http://localhost:8000/member/member/coupons,看到JSON串则表示测试成功
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
坑:不知道是不是版本问题,写bootstrap.properties无法连接到nacos
解决方法:
1、在common添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>
2、在coupon模块下编写bootstrap.yml
spring:
application:
name: gulimall-coupon
cloud:
nacos:
config:
server-addr: localhost:8848
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private String age;
@GetMapping("/test")
public R test() {
return R.ok().put("name", name).put("age", age);
}
coupon.user.name和coupon.user.age是从nacos上获取的
在CouponController类上标注@RefreshScope
一般创建方法:
配置格式:
spring.cloud.nacos.config.namespace=xxx
配置格式:
spring.cloud.nacos.config,group=xxx
每一个微服务创建自己的命名空间,使用group区分环境(test、dev、prod)
把不同类型的配置区分开来,放到不同的文件中
1、数据源配置(命名空间:gulimall-coupon)
2、mybatis配置
3、其他配置
4、修改bootstrap.yml
spring: application: name: gulimall-coupon cloud: nacos: config: server-addr: 127.0.0.1:8848 namespace: d658a478-b874-4c7a-a9c0-5a7548a3034e group: dev extension-configs: - dataId: datasource.yaml group: dev # 动态刷新 refresh: true - dataId: mybatis.yaml group: dev # 动态刷新 refresh: true - dataId: other.yaml group: dev # 动态刷新 refresh: true
5、现在可以注释掉application.yml里的所有内容,启动coupon服务,输入网址http://localhost:7000/coupon/coupon/test进行测试
导入gateway依赖
依赖common模块
1、开启服务注册发现,添加@EnableDiscoveryClient,并排除DataSource相关配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}
2、配置nacos地址,application.properties
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
3、在nacos里新建命名空间gateway
4、新建配置
5、配置bootstrap.yml
spring:
application:
name: gulimall-gateway
cloud:
nacos:
config:
server-addr: localhost:8848
namespace: bfe5c423-248e-4d55-89f9-56b4e2aa75d4
6、配置网关逻辑,application.yml
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url, baidu # 如果参数url的值为baidu,则页面跳转至https://www.baidu.com
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url, qq
7、启动主程序类
8、浏览器输入http://localhost:88/?url=qq观察到页面跳转至腾讯网
application.yml
spring:
cloud:
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url, baidu # 如果参数url的值为baidu,则页面跳转至https://www.baidu.com
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url, qq
7、启动主程序类
8、浏览器输入http://localhost:88/?url=qq观察到页面跳转至腾讯网
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。