SpringCloud基础使用及配置

SpringCloud基础使用及配置


Nacos

Nacos server 启动

docker
docker run --name nacos -p 50000:8848 -p 9848:9848 -p 9849:9849 -e MODE=standalone -d nacos/nacos-server

注意:nacos默认cluster部署,单机部署时一定要改为standalone启动,否则外网访问不了dashboard

Nacos server windows启动
startup.cmd -m standalone

Nacos注册中心

代码使用
  1. 配置pom.xml
<!--SpringCloudAlibaba的版本管理,以后在dependency中引相关依赖就不用写版本号了-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.7.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--Alibaba Nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 配置application.yml
spring: 
  # Nacos服务发现地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  # 本服务名字,用于Nacos服务发现
  application:
    name: coupon
  1. 启动配置类添加@EnableDiscoveryClient注解
工作原理
  1. 加载依赖包后,通过@EnableDiscoveryClien开启Nacos client功能。
  2. spring会根据配置文件application.yml中的信息,将注册信息发送到Nacos server上,完成注册。
  3. 再通过访问Nacos server即可控制Nacos

Nacos配置中心

代码使用
  1. 配置pom.xml
<!--Alibaba Nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

<!--一定得引入bootstrap,否则配置中心不启动!!!-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

<!--注意检查springcloud的版本管理-->
  1. 配置bootstrap.properties或yml文件
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        ## 开发环境的命名空间(细粒度)
        namespace: ff5599f6-3f49-42cb-9570-ef3607199725
        ### 默认配置文件(应用名.file_extention)的配置分组选择(粗粒度)
        group: DEFAULT_GROUP
  application:
    name: coupon
  1. 需要读取配置文件的类,添加@RefreshScope注解,给需要读取配置文件的参数加上@Value(“${coupon.name}”)注解
  2. 在Nacos配置管理列表中更新配置文件

注意:如果配置中心和线下配置文件中都配置了相同的参数,优先使用配置中心的配置

其他

Nacos控制粒度:namespace>group>data id

  1. 命名空间创建规则
  • 开发,生产,测试环境各一个
  • 每个微服务各一个
  1. 配置分组

所有的配置文件默认归属于DEFAULT_GROUP,但是可以通过更改配置文件分组的方式实现批量配置文件替换,如日常一组,双11一组

  1. 批量加载配置文件

    实际写代码通常会把一个配置文件拆成多个独立功能的配置文件,可以通过加载配置文件组(非配置分组功能,配置分组是在nacos server完成的,配置文件组的拆分是在线下完成的,两回事)的方式解决

    spring:
      application:
        name: coupon
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            namespace: e4ad8d82-6ae6-49b6-8011-8907442bceb6
          config:
            server-addr: 127.0.0.1:8848
            file-extension: yml
            ## 开发环境的命名空间(细粒度)
            namespace: e4ad8d82-6ae6-49b6-8011-8907442bceb6
            ### 默认配置文件(应用名.file_extention)的配置分组选择(粗粒度)
            ## group不能省略
            group: dev
            ### 读取多配置文件
            extension-configs[0]:
              data-id: datasource.yml
              group: dev
              refresh: true
            extension-configs[1]:
              data-id: mybatis.yml
              group: dev
              refresh: true
    
    

Nacos整合

在使用Nacos后,所有的配置文件都可以放在配置中心,只需要在bootstrap中声明配置中心及配置文件的信息即可

bootstrap.yml

spring:
  # 本服务名字,用于Nacos注册中心注册和配置中心注册
  application:
    name: coupon
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: e4ad8d82-6ae6-49b6-8011-8907442bceb6
      config:
        server-addr: 127.0.0.1:8848
        ## 开发环境的命名空间(细粒度)
        namespace: e4ad8d82-6ae6-49b6-8011-8907442bceb6
        ### 默认配置文件的配置分组选择(粗粒度)
        group: DEFAULT_GROUP
        ### 线上能读取文件的后缀(除了这个后缀的文件,一概都读取不了)
        file-extension: yml

踩坑

  1. 引入Nacos config一定要引入bootstrap,否则在springboot加载的时候,nacos只启动discovery,不会启动config
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 配置文件执行顺序
  • 线上>线下
  • 线下:后执行的会覆盖先执行的配置文件(执行顺序:yml>properties)
  • 线上:由file-extension决定读取文件的后缀,可自定义,除此之外的后缀都不会被读取

openfeign

代码使用

  1. 配置pom.xml
<!--SpringCloud的版本管理,以后在dependency中引相关依赖就不用写版本号了-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 定义RPC接口
    • 接口上:添加注解@FeignClient(“待调用Service”),告诉要调用哪个Service
    • 接口里:添加Service相同的方法签名作为抽象方法,告诉要调用服务的哪个方法
    • 主配置启动类:添加@EnableFeignClients(basePackages = “com.liu.gulimall.coupon.feign”),告诉对哪些类开启feign扫描
// 接口配置
@FeignClient("coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R memberCoupon();
}

// 配置启动类配置
@EnableFeignClients(basePackages = "com.liu.gulimall.member.feign")
@SpringBootApplication
public class MemberApplication {
    public static void main(String[] args) {
        SpringApplication.run(MemberApplication.class, args);
    }
}

工作原理

  1. 加载依赖包后,通过@EnableFeignClients(basePackages = “com.liu.gulimall.member.feign”)开启openfeignt功能,并开启rpc组件(feign接口)发现。
  2. 通过@FeignClient(“coupon”)定义feign接口,添加与原方法相同的映射url和方法。
    • url才是后续远程调用过程中真实的调用方式
    • 方法保持与原方法相同,目的是为了保证数据类型,返回值类型等相同,保证编译时不报错
  3. 定义了feign接口相当于只是定义了一个方法,还需要在controller中进行调用。

存在意义

如果不通过RPC框架实现此功能,那只能手动在通过模拟get,post发送请求,并获取返回值包装,极其麻烦

Gateway

代码使用

  1. pom.xml
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
</dependencies>

<!--版本管理,以后在dependency中引相关依赖就不用写版本号了-->
<dependencyManagement>
    <dependencies>
        <!--SpringCloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 主配置类添加@EnableDiscoveryClient注解
  2. application.yml中配置路由条件(参考https://cloud.tencent.com/developer/article/1403887)
spring:
  cloud:
    gateway:
      routes:
        - id: baidu_route
          uri: https://www.baidu.com
          predicates:
            - Query=url,taobao

        - id: bilibili_route
          uri: https://www.bilibili.com
          predicates:
            - Query=url,bilibili

SpringCloud整合

  1. Nacos与openfeign整合

    由于SpringCloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错,所以需要在项目中加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效

    参考:https://blog.csdn.net/weixin_43556636/article/details/110653989

<!--Alibaba Nacos修改-->
    <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <!--Alibaba Nacos和Feign整合,要排除ribbon,引入loadbalance-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!--引入loadbalance-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值