1.spring cloud alibaba(微服务一站式解决方案),包含分布式微服务的组件
只需要少量注解即可实现微服务
包括 服务治理 nacos=Naming-service注册中心+config-service配置中心 服务保护 sentinel(熔断器)= sentinel控制台+@SentinelResource 远程调用 dubbo 分布式事务 seata = at+tcc+saga+xa 消息驱动(可搞事务) RocketMQ(java写的) 商业化注解(要money) oss(文件存储) sms(发短信) acm scheduler x(定时任务)
2.不能自己搭配版本看github alibaba文档,还要加spring cloud alibaba版本(本来就有个依赖 spring cloud)
3.语义化版本 1.0.0和1.0.1表示更新小bug ,2.0.0是更新了大版本
//alibaba稳定版本2.2.7.RELEASE
//下载网站github的nacos–>tags—>2.0.3点进去,下载zip解压
4. 使用
在nacos/conf配置文件:
1.需要mysql,建个数据库nacos 字符集utf8mb4
拖到表执行sql文件,建议5.7版本(!!!我装了8.0直接启动不了)
2.改nacos文件夹的配置文件 application.properties
context是默认的路径
打开 33 36 39 40 41行的注释打开
### Count of DB:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
4.打开cmd文件会报错因为会打开集群
cmd文件是可以打开编辑的,批处理文件()
set MODE="standalone"
5.访问 localhost:8848/nacos/
数据库users查看用户密码
5.nacos与eureka(服务端版本可以不管)
1.nacos有登录,eureka没有
2.eureka的注册中心,两个项目有相同的模块名称(把项目名称改动即可解决)
nacos 命名空间(隔离,互不影响)
car—>customer-seriver flower---->customer-seriver
分组(两个团队同时开发,谁开发得快有奖金,互不影响)
//选择start.aliyun.com建springboot项目可以选nacos
web依赖和nacos discovery
3.写配置文件
server:
port: 8080
spring:
application:
name: nacas-client-a
cloud:
nacos: #没有指定命名空间注册到public中,没有指定分组就到DEFAULT_GROUP
server-addr: localhost:8848 #注册中心的地址
username: nacos #注册中心用户名
password: nacos #密码
discovery:
namespace: xxid #在可视化界面创建后的id不是名字
group: A_GROUP #里面的组名
service: user-service #默认用spring.application的值,这里指定就用这个服务名
4.主类加注解
@EnableDiscoveryClient //开启nacos
5.写client
6.跨组怎么找服务写clientb写controller看能不能拿到服务列表(秒级发现,比eureka快)
//同一组名可以相互调用
@Autowired
public DiscoveryClientClient discoveryClient;
@GetMapping("aa")
public String aa(){
discoveryClient.getInstances("user-service");
return "ok"
}
7.集成openfeign
//在提供者写controller info方法
//消费者
@EnableFeignClients
//写个feign的文件夹写接口
@FeignClient(value="user-service") //写nacos的service名字
public interface TestFeign{
@GetMapping("info");
public String info();
}
//在controller看是否调用成功
@Autowired
public TestFeign testFeign;
testFeign.info();//在方法里面调用
8.集成gateway,要看清楚哪个接口是哪个服务的(加入即可访问)
//在配置文件写网关配置
//直接在 服务名称/接口即可访问 localhost/nacos-client-a/test
server:
port: 80
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848,localhost:8850
username: nacos
password: nacos
discovery:
namespace: ce9d7e87-fd23-4622-96a9-3893ed689824
group: ac
gateway:
discovery:
locator:
enabled: true # 开启动态路由
lower-case-service-id: true`
9.nacos开启健康检查(加入依赖)
10.nacos的配置项(在nacos图形界面可以改,看文档)
权重
元数据: 可以自己写上让其他服务拿到自定义数据
11.nacos集群(路径不能有中文)(服务之间数据可以相互同步)
1. application.properties 改成数据库的账号密码 2. cluster.conf 复制一份去example(每个nacos都加上这个配置) #cmd ipconfig,禁用虚拟机,写这个到文件最后一行 我的ip:8848 我的ip:8849 我的ip:8850 #端口被占用cmd,kill进程 netstat -ano |findstr 8849 taskkill /f /t /im 28720 3.java配置文件 server-addr 写上多个注册地址,即可搭建集群
12.nacos配置文件中心(一个服务需要部署到多台服务器,相同的配置文件,如果要修改,就需要下架服务重新打包,麻烦)
1.在nacos图形界面 按+号,增加配置文件
(改几台也可以,配置文件不放在本地,改了后,配置文件中心去仓库拉取配置文件不用重启!!)
nacos主页–>配置列表–>+ —> 新建配置—>yaml—>随便写点配置文件
hero:
name: 亚索
2.写个项目加依赖 web和nacos config 写个controller
@Value("${hero.name}")
private String name;
@GetMapping("info")//返回结果
3.写个文件 bootstrap.yml //表示可以在云端拉的配置文件
server:
port: 8081
spring:
application:
name: nacos-config-a
cloud:
nacos:
config:
username: nacos
password: nacos
#namespace:
#group:
prefix: nacos-config-a #读哪个配置文件
file-extension: yml #拓展名
server-addr: localhost:8848 #配置文件自动放在数
据库持久化
13.改配置文件后不重启刷新配置文件 在entity加
@RefreshScope,后加入到注入即可(后面配置文件直接可以配置)
更多—>历史版本//回滚配置文件,默认组 DEFAUT_GROUP