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")); }
启动工程访问改接口即可
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于