git 文档地址 spring-cloud-alibaba/README-zh.md at 2022.x · alibaba/spring-cloud-alibaba · GitHub
spring cloud alibaba 组件版本说明版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
nacos 配置
引入 nacos 组件依赖
在 common 工程中引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置
在各个工程的 yml 中添加 nacos 配置
spring:
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
开启服务注册发现
在服务启动类添加注解
@EnableDiscoveryClient
启动 nacos
在 bin 目录下执行
startup.cmd -m standalone
启动工程
启动后访问 http://127.0.0.1:8848/nacos 就可以看到注册的服务
将 nacos 作为配置中心
nacos 参考:nacos 配置中心 - 问尤龙の时光 (wenyoulong.com)
@RefreshScope
@Value
这两个注解可以用于获取 nacos 配置中心得配置
OpenFeign 调用
引入 openFeign 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
这里有个 feign 以来的问题,启动如果报以下错误,处理方法如下
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 alibaba 依赖做处理,剔除 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-starter-loadbalancer</artifactId>
</dependency>
测试
在 coupon 工程得 CouponController 中新建方法
@RequestMapping("/member/list")
public R memberCoupon(){
CouponEntity entity = new CouponEntity();
entity.setCouponName("优惠券");
return R.ok().put("coupons", Collections.singletonList(entity));
}
在 member 工程中开启远程服务调用,启动类上添加注解,basePackages 即远程调用接口所在的包路径
@EnableFeignClients(basePackages = {"com.mall.member.feign"})
在对应的包下添加 CouponFeignService 接口,FeignClient 注解中得服务名,就是 coupon 服务注册在 nacos 中的服务名称
@FeignClient("mall-coupon")
public interface CouponFeignService {
@RequestMapping("/coupon/coupon/member/list")
public R memberCoupons();
}
在 MemberController 中添加接口访问 coupon 服务
@Resource
private CouponFeignService couponFeignService;
@RequestMapping("/coupons")
public R test(){
MemberEntity member = new MemberEntity();
member.setNickname("龙");
R memberCoupons = couponFeignService.memberCoupons();
return Objects.requireNonNull(R.ok().put("member", member)).put("coupons",memberCoupons.get("coupons"));
}
启动工程访问改接口即可
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于