引入依赖

1
2
3
4
5
6
7
8
9
10
11
<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>

Nacos注册中心

下载nacos注册中心
https://github.com/alibaba/nacos/releaseshttps://github.com/alibaba/nacos/releases
在这里插入图片描述

下载zip文件 解压 进入 nacos-server-1.4.3\nacos\bin 双击startup.cmd 在windows下运行 成功如下 如果报错则 cmd运行如下命令

1
2
cd nacos-server-1.4.3\nacos\bin
startup.cmd -m standalone

在这里插入图片描述

1
2
3
4
5
#引入依赖 服务注册发现
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在每一个微服务下指定注册中心的地址

1
2
3
4
#在项目application.yml中配置 注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#在项目中配置服务名
spring.application.name=gulimall-coupon

注册到注册中心

1
2
3
4
5
6
7
8
9
10
11
12
//在启动类中加入@EnableDiscoveryClient注解
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallCouponApplication {


public static void main(String[] args) {

SpringApplication.run(GulimallCouponApplication.class, args);
}

}

Nacos 管理页面 登陆账号 密码 默认为nacos
http://192.168.56.1:8848/nacos/index.htmlhttp://192.168.56.1:8848/nacos/index.html

注册成功后 可查看 服务管理 服务名处 有配置的服务
在这里插入图片描述

Fegin 声明式远程调用

Fegin是一个声明式http客户端

在调用方服务中引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

在被调用方编写一个请求

1
2
3
4
5
6
7
@RequestMapping("/member/list")
public R membercoupons(){

CouponEntity couponEntity = new CouponEntity();
couponEntity.setCouponName("满一百减十");
return R.ok().put("coupons",Arrays.asList(couponEntity));
}

在调用方编写Feign 接口

1
2
3
4
5
6
7
8
9
10
//标明远程客户端 注解 参数为被调用方的在注册中心中配置的服务名
@Service
@FeignClient("gulimall-coupon")
public interface CouponFenginService {

//与被调用方的请求 路径相同
@RequestMapping("/coupon/coupon/member/list")
//与被调用方的请求 方法相同
public R membercoupons();
}

在调用方服务中启动类开启调用功能

1
2
3
4
5
6
7
8
9
10
11
12
13
//参数为fegin的包的全包名
@EnableFeignClients(basePackages = "com.jhj.gulimall.member.fegin")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {


public static void main(String[] args) {

SpringApplication.run(GulimallMemberApplication.class, args);
}

}

在调用方中 注入CouponFenginService 进行调用

1
2
3
4
5
6
7
8
9
10
11
12
@Autowired
CouponFenginService couponFenginService;
@RequestMapping("/coupons")
public R test(){

MemberEntity memberEntity=new MemberEntity();
memberEntity.setNickname("张三");

R membercoupons = couponFenginService.membercoupons();

return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
}

Nacos配置中心

导入依赖

1
2
3
4
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

在resource 下创建bootstrap.properties文件 该文件会优先于application.properties 文件加载

1
2
3
4
#服务名
spring.application.name=gulimall-coupon
#配置中心地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

在nacos配置中 新增配置 文件名为服务名.properties 点击发布
在这里插入图片描述
在使用配置的类上加入@RefreshScope注解 即可完成配置 修改nacos中的配置内容 无须重启服务 配置修改成功 如果配置中心和配置文件中有相同的项,优先获取配置中心的配置
springboot中用@Value(“${配置名}”)获取值

配置中心命名空间

用于配置隔离,默认是public

1.
区分 开发 测试 生产配置
可以创建多个命名空间
注意使用时需要在项目中bootstrap.properties文件中配置

1
2
3
#值为配置管理后面的一串命名空间的唯一id
# 而不是命名空间的名字
spring.cloud.nacos.config.namespace=ed649994-9050-4bde-9e4f-d84e208073fd

在这里插入图片描述

1.
每一个微服务之间互相隔离
每一个都创建自己的命名空间
操作与1相同

配置中心 配置集

所有的配置的集合

配置中心 配置集ID 类似于配置文件名 即Data Id

配置中心 配置分组

默认所有的配置集都属于DEFAULT_GROUP
注意使用时需要在项目中bootstrap.properties文件中配置

1
2
#值为分组名
spring.cloud.nacos.config.group=111

在这里插入图片描述

配置中心同时加载多个配置集

任何配置文件都可以放到配置中心中(数组编号) 需要在bootstrap中说明配置中心的配置文件

1
2
3
4
5
6
#配置文件data-id
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
#配置文件group
spring.cloud.nacos.config.ext-config[0].group=dev
#是否动态刷新
spring.cloud.nacos.config.ext-config[0].refresh=true

作者声明

1
如有问题,欢迎指正!