废话不多说干货上;依次为nacos、feign、gateway
第一个中间件:Nacos用作微服务的注册、发现以及配置文件的配置,相比Eureka的功能多那么一点点,还有可视化操作页面也非常方便,好下面来看具体使用。
**nacos使用步骤(windows):
1、下载安装:**下载地址-- https://gitee.com/mirrors/Nacos/tags
我这里用的是1.4.1版本;然后解压,如图:
nacos是用java编写的文件结构如下:
**2、配置端口:conf文件夹下的application.properties为nacos的配置文件;打开可以修改端口号。
3、启动、访问
1、单机nacos启动;双击bin文件夹下的starup(windows命令脚本)等待几秒钟即可或者在bin文加下打开命令行窗口输入startup.cmd -m standalone命令启动;
2、访问地址:http://192.168.0.103:8848/nacos/index.html#/login
登录的账号和密码均为nacos;输入即可登录。
4、nacos集成到springboot中:
1)首先在父级工程中的标签下添加AliCloud的管理依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
如图:
2)子项目(微服务)中添加nacos依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
如图:
3)在子项目(微服务)中的配置文件中添加nacos的连接配置:
cloud:
nacos:
server-addr: localhost:8848 #nacos的服务地址
4)启动微服务,刷新nacos页面可以看到微服务已经出现在nacos中。
4、nacos集群搭建:
1)nacos集群是为了容灾,其实就是把多个微服务实例分布到不同的地域或者机房来预防因为某个机房出现问题导致系统崩溃的现象出现,简单理解就是在nacos和微服务中间多了一层分类,每一个分类包含多个微服务实例。
2)实现集群:在微服务项目的配置文件中的nacos配置出再添加:
discovery:
cluster-name: TK-BeiJing #配置集群名称(机房的区域,这里是北京)
如图:
刷新nacos可以看到:
3)nacos中的权重设置:数值越大被访问的次数就越多,数值如果为0时则不访问(以后版本升级可以采用把一部分服务器权重设置为0,一部分不变,这样在系统升级时用户就不会有感知了可以平滑升级)一般数字区间是0.1~1选择即可。
5、nacos命名空间相当于一个文件夹而注册到该命名空间下的微服务相当于文件,其实就是一个分类而不是把所有的微服务全部注册到默认的命名空间内;
1)新建命名空间如图:
2)在微服务的配置文件内添加配置使微服务注册到该命名空间;
6、临时实例和非临时实例的区别:简单来说,当微服务挂掉后nacos会删除该微服务而非临时的不会而nacos会主动向各个微服务推送信息说这个服务挂掉了然后更新,但是这样会增加nacos和微服务的压力可以不用;
ephemeral: true #是否是临时实例 true 为临时实例 默认是true
7、nacos配置中心使用详解:
1)这里不是吧idea配置文件中的所有内容都复制过来,而是一些会根据不同业务来改变的全局变量;
2)热更新无需重启微服务服务立即生效;
3)在nacos中创建配置文件:如,图1和图2
4)springboot读取nacos配置文件步骤:
1))在微服务的pom中添加读取nacos-config的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--针对于2020以上的springcloud(ali)的项目需要bootstrap依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2))然后在resources文件夹下创建一个bootstrap.yaml的文件,这个文件在服务启动时比application.yaml优先加载;
注意:记者注释掉application.yaml文件中相同的配置如图:
3))在项目中读取nacos配置文件中的变量:
如图:
4))以上是.properties 配置文件格式关于.yaml格式配置自己看吧官方文档
获取配置文件的方式还是
@Value("${author.name}")
private String name;
;
5))配置文件热更新@RefreshScope可以动态刷新微服务nacos配置文件的数据,只要nacos配置文件的数据发生改变微服务就会获取到新的数据;
出了用@Value获取配置文件的数据外还可以用@ConfigurationProperties注解新建一个类来获取这样也不用再使用@RefreshScope注解了,就可以实现动态更新;
新建类:
controller:
5、nacos的配置文件共享:微服务在读取nacos中的配置文件时总会去读取一个以服务名称.yaml的配置文件,当然如果你没在nacos中创建则不会获取任何数据,如果创建了就会获取到数据,这个我现在感觉不会用到就不再多说了。
6、nacos集群过几天再说;
feign使用
首先,feign是声明是借口访问而且继承了rebbon实现负载均衡,springboot中添加feign依赖;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
其次在启动类添加开启feign的自动装配功能@EnableFeignClients;
其次feign性能优化:feign本身是一个http请求,每次请求都会创建URLConnection,而其不支持连接池所以每次创建和销毁都会占用一定的cpu,所以我们用httpclient代替URLConnection实现http请求;
首先,引入依赖:
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
其次在配置文件中加入
feign:
httpclient:
enabled: true #支持httpclient连接池
max-connections: 200
max-connections-per-route: 50
如图:
gateway网关使用
1、路由配置:
添加依赖
<!--nacos依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--gateway-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
配置文件配置如图: