概述
一.SpringCloud Alibaba能干嘛??
下载地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
二.SpringCloud Alibaba Nacos服务注册与配置中心
1.Nacos简介
Naming和Configuration的前两个字母,最后的设为Service.
Nacos:是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。简单的说就是注册中心+配置中心的组合.
Nacos替代了Eureka做服务注册中心,替代了Config做服务配置中心
2.Nacos下载安装
下载地址:https://github.com/alibaba/nacos/releases
安装条件:本地java8 + Maven环境
解压后直接运行bin目录下的startup.cmd
访问:http://localhost:8848/nacos可以进入nacos页面表示安装成功.
3.Nacos作为服务注册中心演示
①构建基于Nacos的服务提供者
因为各个微服务都需要alibaba-cloud的依赖,所以先直接将该依赖添加到父工程上
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
1️⃣.在服务提供者的pom中添加依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2️⃣.在yml中添加配置:(可以参考官网)
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
3️⃣.写主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
4️⃣.业务类
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id){
return "nacos registry ,serverPort: "+serverPort+"t id:"+id;
}
}
5️⃣.为了演示集群和负载均衡,可以再建几个服务提供者
也可以这么操作
②构建基于Nacos的服务消费者
1️⃣.因为之前已经在父工程下引入了alibaba-cloud的依赖了.所以这不用在引入,只需要在pom中引入nacos的依赖
<dependencies>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2️⃣.在application.yml中添加配置
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 消费者将要去访问的微服务名称(注册成功经Nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
3️⃣主启动
4️⃣Nacos集成了Ribbon,稍后会用到RestTemplate调用服务提供者,所以着了在向容器中注入一个RestTemplate的Bean
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced //有两个被调用的服务时不开启负载均衡会报错,因为RestTemplate不知道自己要去调用那个
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
5️⃣.业务类
@SpringBootApplication
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id){
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
6️⃣测试:
访问:http://localhost:83/consumer/payment/nacos/13
不断刷新,可以发现输出的端口号以轮询的方式变化;
结论:Nacos默认支持轮询方式的负载均衡;
4Nacos的AP和CP切换
5.Nacos作为服务配置中心演示
以前可以通过Config 结合Bus将配置文件放到GitHub上统一配置,实现自动刷新和动态的更新。
现在可以用Nacos替代Config做服务配置中心,将配置写进Nacos,
①Nacos作为配置中心–基础配置
1️⃣新建module,在pom中引入依赖
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基础配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2️⃣添加bootstrap.yml和application.yml
为什么添加两个yml?:
Nacos同SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置后,才能保证项目的正常启动.
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
bootstrap.yml:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
application.yml
spring:
profiles:
active: dev #表示开发环境
3️⃣主启动类
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class,args);
}
}
4️⃣业务类
@RestController
@RefreshScope //支持Nacos的动态刷新功能
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/ingo")
public String getConfigInfo(){
return configInfo;
}
}
5️⃣在Nacos中添加配置信息
配置规则:
添加配置文件界面:
6️⃣.启动配置好的配置中心服务,
访问:http://localhost:3377/config/info
7️⃣Nacos作为服务配置中心自带动态刷新功能;
不用向Config那样还要发送post请求更新…
②Nacos作为配置中心–分类配置
实际开发中,通常一个系统会准备dev开发环境,test测试环境,prod生产环境.
或者,一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又会有相应的开发环境,测试环境预发环境和正式环境…
需要对这些微服务配置进行管理
Nacos可以实现配置的分类管理
Nacos默认的命名空间是public,Namespace主要用来实现隔离.–dev /test/prod
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个组里面.
三种方案加载配置
1️⃣DataId方案
2️⃣Group方案
然后咋config下新增一条group的配置即可—用那个group配置就写哪个,⬇
3️⃣.Namespace方案
(1) 新建dev/testde Namespace
(2) 在两个命名空间下可以分别建不同的group,以及DataId的配置文件
(3) 在bootstrap.yml下配置:
6.Nacos集群和持久化配置
实际工作中不可能只用一台Nacos微服务运行,万一挂了怎么办?所以必须Nacos配置集群;而且Nacos宕机后有些配置数据重启后需要保留的,所以持久化的配置也是必须的.
由于Nacos自带嵌入式数据库derby,如果配置集群后,每个节点都会有一个数据库,这样的话数据一致性就很难保证了,所以需要将Nacos默认的数据库迁移到MySQL上(Nacos采用了集中式存储的方式来支持集群化部署,目前只支持Mysql的存储).
①Derby切换到Mysql(持久化配置)
1️⃣在 nacosconf
目录下找到sql脚本nacos-mysql.sql
,执行该脚本
2️⃣修改conf/application.properties
文件,增加支持mysql数据源配置,添加mysql数据源的url,用户名和密码:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config? characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
3️⃣重启nacos后之前配置的配置信息就空白了,以后再存配置信息就会存到mysql中了
注意:mysql版本必须为5.6.5+
②搭建Nacos集群
官网明确提出:需要至少三个Nacos,
1️⃣.梳理出三台nacos机器的不同端口号
在conf目录下复制出一个cluster.conf,更改里面ip的端口,
如果是在Linux环境下,不能写127.0.0.1,必须是Linux命令hostname -i
能识别的ip,
2️⃣.因为Nacos默认是单机版启动,所以需要手动改成集群启动,在bin下的startup.cmd文件中修改
3️⃣.在将nacos复制两份,文件名最好都以端口命名,好区分
然后分别将它们各自的conf下的application.properties文件中的server.port
分别改为8848,8849,8850;
4️⃣.分别启动这三个nacos,到bin下点击startup.cmd即可启动
windows环境下的nacos搭建完毕.
③用Nginx作负载均衡器
1️⃣.windows下的Nginx启动方式必须用cmd命令启动,直接点击nginx.exe文件会报错,如果不小心双击了,需要在资源管理器中结束ngins的进程;或 者使用如下相关指令操作:
2️⃣.修改nginx.conf文件
3️⃣.启动Nginx,cmd: start nginx
测试: 由于在nginx.conf文件中监听端口为1111,所以访问localhost:1111/nacos
即可
4️⃣.修改微服务的配置:
资料分享:来自站点外:windows下Nginx的部署:
windows下nacos的集群搭建
最后
以上就是乐观电脑为你收集整理的SpringCloud Alibaba Nacos服务注册与配置中心_学习笔记一.SpringCloud Alibaba能干嘛??二.SpringCloud Alibaba Nacos服务注册与配置中心的全部内容,希望文章能够帮你解决SpringCloud Alibaba Nacos服务注册与配置中心_学习笔记一.SpringCloud Alibaba能干嘛??二.SpringCloud Alibaba Nacos服务注册与配置中心所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复