一 . 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>
- application.yml中配置nacos地址
cloud:
nacos:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
- 我们在主程序入口引入一个注解 用来开启服务注册与发现
@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的配置中心如何配置呢?我们接着往下走
- 首先引入依赖
<!-- 服务配置-->
<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
-
进入nacos配置中心的配置列表我们需要添加一个数据集(data Id)也就是服务名称.properties 这里是gulimall-coupon.properties ,然后将配置文件里的配置粘贴赋值到nacos配置文件中。
-
控制器里我们需要增加 @RefreshScope 刷新我们nacos的配置
-
如果nacos配置中心里有配置,优先从nacos中选择。
补充:获取配置的值的方法 @Value("${xxxxxxx}") private String value;
四:命名空间主要时用于配置隔离
默认: public(保留空间)默认新增的所有配置都在public空间
- 开发,测试,生产,利用命名空间来做环境隔离 注意:bootstrap.properties 配置我们指定的命名空间 spring.cloud.nacos.config.namespace=生成的命名空间id
- 没一个微服务之间相互隔离配置,每一个微服务都创建自己的命名空间,只加载自己的命名空间下的所有配置
五:通过当前命名空间下指定我们不同环境下的分组
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