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

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

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)

  • 笔记

    好记性不如烂笔头。

    308 引用 • 793 回帖

相关帖子

欢迎来到这里!

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

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