springcloud-Nacos、Feign

150 阅读3分钟

一 . nacos服务注册与发现的配置。

1.下载nacos服务器在本地启动 然后项目中引入依赖


<!--           服务注册与发现-->
          <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-loadbalancer</artifactId>
              <version>2.2.7.RELEASE</version>
          </dependency>
  1. application.yml中配置nacos地址
cloud:
  nacos:
    server-addr: 127.0.0.1:8848
application:
  name: gulimall-coupon
  1. 我们在主程序入口引入一个注解 用来开启服务注册与发现

@EnableDiscoveryClient

4.这样我们在nacos可视化界面中就能发现该服务了。

二 : Feign实现服务之间的接口调用,前提在创建项目时已经导入feign依赖

2.1 首先在被调用服务中编写接口,被其他服务调用

/**
 * 远程调用测试使用会员服务调用优惠卷服务,会员的所有优惠卷信息
 *
 * @author yyf
 * */
@RequestMapping("/memeber/list")
public R testMemberCouponList(){
    CouponEntity couponEntity = new CouponEntity ();
    couponEntity.setCouponName ("满100减10");
    return R.ok ().put ("coupons", Arrays.asList (couponEntity));
}

2.2 其次我们在调用者服务里编写feign服务和接口来调用上面那个接口

2.2.1 首先我们编写个feign服务,这里的接口服务的地址需要填写完整地址

package com.youfa.gulimall.member.feign;

import com.youfa.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * program: gulimall
 *
 * @description: 会员服务调用优惠卷服务接口
 * @author: yangyoufa
 * @date: 2022/11/23
 */
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    /**
     * coupon服务接口
     * return 会员的所有的所有优惠卷服务
     *
     * @author yyf
     */
    @RequestMapping("/coupon/coupon/memeber/list")
    public R testMemberCouponList();
}

2.3 然后我们在主程序入口添加如下注解,扫描feign服务接口

@EnableFeignClients("com.youfa.gulimall.member.feign")

2.4 然后编写接口调用feign服务 首先注入CouponFeignService

// 远程服务接口
@Autowired
private CouponFeignService couponFeignService;

/**
 * 查询会员的所有优惠卷信息接口 远程调用了coupon服务
 *
 * @author yyf
 * */
@RequestMapping("/coupon/list")
public R listMemberCoupon(){
    MemberEntity memberEntity = new MemberEntity ();
    memberEntity.setNickname ("张三");
    R memberCouponList = couponFeignService.testMemberCouponList ();
    return R.ok ().put ("member",memberCouponList).put ("coupons",memberCouponList.get ("coupons"));
}

三:那nacos的配置中心如何配置呢?我们接着往下走

  1. 首先引入依赖
<!--   服务配置-->
          <dependency>
              <groupId>com.alibaba.cloud</groupId>
              <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
          </dependency>

2.创建一个bootstrap.properties文件,因为新版cloud中不支持bootstrap所以我们需要引入bootstrap依赖

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bootstrap</artifactId>
  <version>3.0.1</version>
</dependency>

在bootstrap中配置nacos配置中心的地址,优先级最高

# 服务配置名称
spring.application.name=gulimall-coupon
# 服务配置地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  1. 进入nacos配置中心的配置列表我们需要添加一个数据集(data Id)也就是服务名称.properties 这里是gulimall-coupon.properties ,然后将配置文件里的配置粘贴赋值到nacos配置文件中。

  2. 控制器里我们需要增加 @RefreshScope 刷新我们nacos的配置

  3. 如果nacos配置中心里有配置,优先从nacos中选择。

补充:获取配置的值的方法 @Value("${xxxxxxx}") private String value;

四:命名空间主要时用于配置隔离

默认: public(保留空间)默认新增的所有配置都在public空间

  1. 开发,测试,生产,利用命名空间来做环境隔离 注意:bootstrap.properties 配置我们指定的命名空间 spring.cloud.nacos.config.namespace=生成的命名空间id
  2. 没一个微服务之间相互隔离配置,每一个微服务都创建自己的命名空间,只加载自己的命名空间下的所有配置

五:通过当前命名空间下指定我们不同环境下的分组

spring.cloud.nacos.config.group=prod

六: 同时读取某个组内多个文件,这里把配置文件拆分成多个文件,解耦了将服务配置细化,mybatis是mybatis配置中,各司其职. 同时读取多个配置文件的方法

# 同时读取某个组内多个文件,这里把配置文件拆分成多个文件,解耦了
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].refresh=true