谷粒商城学习笔记,第三天:分布式组件

谷粒商城学习笔记,第三天:分布式组件

一、分布式选型

插件作用
nacos注册中心 + 配置中心
Ribbon负载均衡
openFeign远程调用
gatewayAPI网关
sentinel服务容错(降级、限流、熔断)
sleuth调用链监控
seata分布式事务解决方案

我们在使用spring-cloud-alibaba之前,应先在父工程中引用(确定版本)

<dependencyManagement>
    <!--spring-cloud-alibaba-->
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

二、注册中心Nacos

1、下载Nacos-server

Nacos Server 下载

2、客户端:引用Nacos

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3、客户端:配置文件制定Nacos Server地址

##Nacos server
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

4、客户端:打开服务注册和发现

##在主启动类上 增加
@EnableDiscoveryClient

5、客户端:设置服务端口和服务名称

##服务名称
spring:
  application:
    name: gulimall-coupon
##服务端口
server:
  port: 7000

注意:

nacos1.3.2 Windows版本默认使用cluster集群启动,我们需要修改下配置文件

application.properties

##打开一下配置
### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://xxxxxxxxxxxx:3307/gulimall_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=admin123

cluster.conf.example修改成cluster.conf

#nacos本机
192.168.0.139:8848

三、远程调用OpenFeign

1、服务端和客户端 :引入OpenFeign

<!--openFeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、服务端和客户端:指明注册中心服务路径

##Nacos server
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

3、服务端:提供Feign接口

@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;


    @GetMapping("/couponListByMemberId")
    public R couponListByMemberId(){
        CouponEntity entity =  new CouponEntity();
        entity.setId(1l);
        entity.setCouponName("满100减30");
        return R.ok().put("couponList",Arrays.asList(entity));
    }

}

4、客户端:Feign接口

@FeignClient("gulimall-coupon")
public interface CouponFeign {

    @GetMapping("/coupon/coupon/couponListByMemberId")
    public R couponListByMemberId();
}

5、客户端:开启FeignClient服务

//打开Feignclient:并指定feign的扫描包
@EnableFeignClients(basePackages = "com.lee.gulimall.member.feign")

6、客户端调用

@RestController
@RequestMapping("member/member")
public class MemberController {

    @Autowired
    private CouponFeign couponFeign;

    @GetMapping("/test/{memberId}")
    public R test(@PathVariable("memberId") Long memberId){
        R r = couponFeign.couponListByMemberId();
        return R.ok().put("couponList",r.get("couponList")).put("memberId",memberId);
    }
}

四、配置中心Nacos

1、引用

<!--spring-cloud-alibaba-nacos config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2、创建bootstrap.yml

指明:应用名称 和 配置中心地址

spring:
  application:
    name: gulimall-coupon
  cloud:
    nacos:
      config:
        ##配置中心地址
        server-addr: 127.0.0.1:8848
        ##名称后缀
        file-extension: yml
  profiles:
    active: dev

Data ID名称规则:

${prefix}-${spring.profile.active}.${file-extentsion}

prefix:
	默认值为:spring.application.name,也可以通过spring.cloud.nacos.config.prefix来配置

spring.profile.active:
	spring.profile.active不存在时,对应的连接符也将不存在。
	对应的data id拼接格式为:
	${prefix}.${file-extension}

file-extension:
	为配置内容的数据格式,可以通过spring.cloud.nacos.config.file-extension来配置。
	目前只支持properties和yaml类型

3、在nacos配置中心创建对应文件

## DATA ID : gulimall-coupon-dev.yml

## CONTENT
coupon:
    user:
        name: zhangsan
        age: 20

4、打开动态刷新+测试

controller文件中

//@RefreshScope打开动态刷新
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {

    @Value("${coupon.user.name}")
    private String name;

    @Value("${coupon.user.age}")
    private int age;

    @GetMapping("/dynamicConfig")
    public R dynamicConfig(){
        return R.ok().put("name",name).put("age",age);
    }
}

5、其他

1>、namespace:配置文件的环境隔离

【可以根据 DEV TEST PROD 开发阶段命名,也可以根据COUPON MEMBER ORDER 服务类型命名】

##第一步:在nacos中创建namespace

##第二步:在bootstrap.yml中指明要使用的命名空间
spring:
  application:
    name: gulimall-coupon
  cloud:
    nacos:
      config:
        ##配置中心地址
        server-addr: 127.0.0.1:8848
        ##名称后缀
        file-extension: yml
        ##命名空间
        namespace: 5fa23e47-f4ec-4874-8e5c-ed9b4657cad8
  profiles:
    active: dev

##第三部:在nacos的对应的namespace中创建对应的  配置文件
2>、group:配置组
##第一步:在nacos中 创建  配置文件的时候  指明 group

##第二步:在bootstrap.yml中指明要使用的group

spring:
  application:
    name: gulimall-coupon
  cloud:
    nacos:
      config:
        ##配置中心地址
        server-addr: 127.0.0.1:8848
        ##名称后缀
        file-extension: yml
        ##命名空间
        namespace: 5fa23e47-f4ec-4874-8e5c-ed9b4657cad8
	    ##分组
        group: coupon
  profiles:
    active: dev

注意:可以根据 业务类型 分namespace 根据 开发阶段 分 group

3>、加载多配置集

根据属性配置:DataSource redis mybatis 等

##第一步:配置
spring:
  cloud:
    nacos:
      config:
        extension-configs[0]:
          data-id: datasource.yaml
          group: dev   # 默认为DEFAULT_GROUP
          refresh: true   # 是否动态刷新,默认为false
        extension-configs[1]:
          data-id: mybatis.yaml
          group: dev
          refresh: true
        extension-configs[2]:
          data-id: redis.yaml
          group: dev
          refresh: true
          
##第二步:在nacos中创建对应的文件  datasource.yaml  mybatis.yaml  redis.yaml

五、API网关Gateway

路由:Route 、 断言:Predicate 、 过滤器:Filter

1、引入

<!--spring-cloud-gateway-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

2、配置文件

server:
  port: 88
spring:
  application:
    name: gulimall-gateway
  cloud:
    gateway:
      routes:
        - id: coupon_routh #路由的ID,没有固定规则但要求唯一,建议配合服务名
          uri: http://localhost:7000   #匹配后提供服务的路由地址
          predicates:
            - Path=/coupon/**   #断言,路径相匹配的进行路由

        - id: member_routh
          uri: http://localhost:8000
          predicates:
            - Path=/member/**   #断言,路径相匹配的进行路由

3、指明注册中心路径

spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848

4、主启动类开启服务发现

##主启动类添加
@EnableDiscoveryClient

5、测试

访问:http://localhost:88/coupon/coupon/couponListByMemberId

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值