微服务框架需要学习的东西很多,基本上我把它分为了五个模块:
第一:微服务技术模块
分为三个常用小模块:
1.微服务治理:
注册发现
远程调用
配置管理
网关路由
2.微服务保护:
流量控制
系统保护
熔断降级
服务授权
3.分布式事务:
分布式事务
TCC模型
AT模型
Seata
第二:缓存技术模块
分为三个小模块
1.分布式缓存:
Redis数据结构
SpringDataRedis
缓存穿透、雪崩
2.多级缓存:
Openresty
多级缓存
Nginx本地缓存
缓存数据同步
3.Redis集群:
Redis集群
Redis主从复制
Lua脚本
数据持久化
第三:异步通信模块
分为两个模块
1.异步通信:
数据持久化
消息堆积问题
MQ消息模型
SpringAMQP
2.可靠消息服务:
消息可靠性
消息幂等性
镜像集群
延迟队列
第四:搜索技术模块
主要就一个分布式搜索:
DSL语句
RestAPI
ES集群状态
第五:Devops模块
主要就是Docker技术:
Docker使用
Dockerfile
Dockers compose
版本兼容关系:

SpringCloud的关键:如何在Java代码中发起Http请求,来达到分布式的需求。


关于Nacos的理解
关于Nacos,我的理解是,在SpringCloudAlibaba中Nacos是Eureka的替代,但是他的功能要比Eureka多一些。


Nacos的依赖:
父工程依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
子工程的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在子工程的application.yml引入的配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
///========注意 在做这些操作之前需要把以前使用Eureka的依赖和配置都注释掉
Nacos集群配置:


Nacos可以直接在网页上修改权重,不过Nacos他默认的选择的是随机查询

Nacos有个特殊的地方的是他有一个命名空间Namespace:

在Nacos网页上选择新建命名空间然后复制命名空间id粘贴到项目中的application.yml文件中:

从这里可以知道,我们需要服务可访问,必须把他们放在同一个命名空间之下
==========Nacos与Eureka之间的区别在于服务的健康检测=============
Nacos所有的新创建实例默认为临时实例,临时实例做的检测时心跳检测,Nacos检测时间比Eureka的要快一些。当Nacos创建的实例为非临时实例,Nacos会主动询问服务,并且当这个实例挂掉之后,Nacos不会清理掉他,而是会等他重新启动,并且会把服务挂掉的信息告诉给消费者。

如何设置临时和非临时实例:


CP和AP,CP就是强关联
关于Nacos的配置管理:
(对于一些有热更新需求的配置进行管理)




总结:如果需要在Nacos配置内完成热更新,我们需要做以下几件事情,第一,在Nacos浏览器中修改Nacos中的配置管理并发布(注意记住Nacos中配置管理的DataId),其次在发布成功之后我们需要在后端程序中新建一个配置文件(名字一定要是bootstrap.yaml),在配置文件中我们需要加入服务的名称,开发环境以及后缀名,然后我们需要在相对应的Controller类中加入@RefreshScope注解,然后把配置文件的属性和名称使用@Value("${配置全称}"),这样我们就完成了Nacos的配置拉取和热修改
===如果Nacos创建了配置管理但没有加配置文件名称如userservice.yaml(加配置环境名称:userservice-dev.yaml)则表示这个配置是属于共享的环境配置,我们可以在这里面设置其他服务器所共享的配置。如果不同区域内的程序则调用不到dev
(profiles:
active: dev #开发环境,这里是dev)的配置下面配置是test的文件。

如果配置属性里面都有的话,遵循如下配置:项目里面写的配置<服务名.yaml<服务名-环境名.yaml

Nacos的集群处理:


Nacos1-3是我在一台电脑上模拟的Nacos集群的效果,在里面我分别修改了

三个端口作为Nacos的启动端口,和修改了
application.propersties文件里面的内容作为连接数据库,其中db.num=1代表有一个集群数量(几台MySQL默认一台)并且把三个Nacos的端口分别改成8845、8846、8847三个不同的端口。做完这些操作之后还需要对Nginx的config文件进行修改:找到里面的nginx.conf文件,在里面添加配置
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}

这样当我们访问80端口的时候就会自动给我们随机访问到Nacos的8845~8847之间的端口从而实现集群搭建。