商城笔记 2---- 引入 Spring Cloud Alibaba 组件

本贴最后更新于 706 天前,其中的信息可能已经时异事殊

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 就可以看到注册的服务image.png

将 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")); }

启动工程访问改接口即可

Spring cloud gateway 网关

参考 spring cloud gateway 配置 - 问尤龙の时光 (wenyoulong.com)

  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...