Spring Cloud Alibaba中文文档地址
https://github.com/alibaba/spring-cloud-alibaba/wiki
1. 本次使用版本
Spring Cloud Version Hoxton.SR9
Spring Cloud Alibaba Version 2.2.6.RELEASE
Spring Boot Version 2.3.2.RELEASE
版本关系见
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
2. 引入依赖
修改项目的pom.xml,原parent标签可以删除
<dependencyManagement>
<dependencies>
<!--Spring Cloud Alibaba的版本管理,通过dependencyManagement完成继承-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Boot的版本管理,通过dependencyManagement完成继承-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud的版本管理,通过dependencyManagement完成继承-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
另一种初始化方式
浏览器地址https://start.aliyun.com/bootstrap.html或在idea中通过https://start.aliyun.com来创建
3. nacos服务端
3.1. 什么是nacos
官方: 一个更易于构建云原生应用的动态服务发现(Nacos Discovery)、服务配置(Nacos Config)和服务管理平台。
3.2. nacos文档
Spring Cloud Alibaba Nacos Discovery
Spring Cloud Alibaba Nacos Config
3.2. 注册中心演变及其设计思想
- 服务存在ip:port变更可能以及水平扩容后的地址管理。
手动使用注册表配合nginx负载均衡来解决 - 服务宕机,nginx自身无服务监控(可搭配中间件实现),另一方面,大量的配置服务带来的配置文件,运维变得困难。
使用注册中心
3.2.1. 注册中心设计思想
通过Mysql存储服务信息
- 服务启动时调用注册接口,insert注册表
- 定时任务去注册中心获取服务列表,select注册表并缓存
- 根据上一步获取的列表来进行服务调用
- 服务定时发送心跳至注册中心
- 服务关闭时调用注销接口
3.2.2. 主流注册中心对比
3.2. 下载地址
nacos版本参考官方版本关系
https://github.com/alibaba/nacos/releases
3.3. 启动nacos
本次使用windos版本的nacos
nacos默认使用集群模式启动,单机模式在bin目录下使用下方命令
startup.cmd -m standalone
或者修改bin目录下修改startup.cmd
set MODE="standalone"
之后直接双击startup.cmd
3.3.1. 控制台地址
默认地址 http://192.168.0.102:8848
默认账号 nacos
默认密码 nacos
3.3.2. 通过mysql保存数据
- 修改conf目录下application.properties
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
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
- 创建数据库后执行conf目录下的nacos-mysql.sql
4.项目集成nacos-discovery
4.1. 服务注册发现
- 修改项目pom.xml添加依赖
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring.cloud.alibaba.version}</version>
</dependency>
- 启动类添加@EnableDiscoveryClient注解
@SpringBootApplication
//Spring Cloud 原生注解 ,开启服务注册发现功能
@EnableDiscoveryClient
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run( StockApplication.class, args );
}
}
- application.yml中添加配置
spring:
cloud:
# 参考 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc#%E5%85%B3%E4%BA%8E-nacos-discovery-starter-%E6%9B%B4%E5%A4%9A%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9%E4%BF%A1%E6%81%AF
nacos:
discovery:
# Nacos Server 启动监听的ip地址和端口
server-addr: 127.0.0.1:8848
# 注册的服务名
service: stock-service
# 命名空间ID,Nacos通过不同的命名空间来区分不同的环境,进行数据隔离,服务消费时只能消费到对应命名空间下的服务。
namespace: public
# 是否为临时实例,如果不是临时实例那么宕机后实例不会被删除
# ephemeral: true
# 当要上阿里云时,阿里云上面的一个云账号名
# access-key:
# 当要上阿里云时,阿里云上面的一个云账号密码
# secret-key:
# 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
# metadata:
# 注册的端口,默认情况下不用配置,会自动探测,默认值-1
# port: -1
# 注册的IP地址,优先级最高
# ip:
# 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
# network-interface:
# 取值范围 1 到 100,数值越大,权重越大,默认1
# watch: 1
# 日志文件名
# log-name:
# Nacos集群名称
# cluster-name:
# 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
# endpoint:
# 是否集成Ribbon,一般都设置成true即可
# enabled: true
- 启动服务后在nacos控制台可以查看到该服务
4.2. 通过服务名称调用服务以及负载均衡
在4.1.的基础上进行修改
- 修改启动类,添加代码
// ribbon客户端负载均衡注解
@LoadBalanced
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
- 调用服务的代码通过服务名称调用
String result = restTemplate.getForObject("http://服务名称/*/*", String.class);
可以通过启动多个服务实例后调用测试负载均衡
5. 代码
https://download.csdn.net/download/qq_42017523/44992268