目录
Spring Cloud Alibaba
注册中心-Nacos
Nacos下载以及安装
Windows 环境演示:
单机启动
?2、集群模式
Springboot服务搭建
一、新建微服务父项目
1、new project?选择maven
2、填写项目基本信息,完成parent项目初始化
?3、删除不需要的src文件夹
二、新建微服务
1、new module(可以选择Spring)
?2、填写微服务模块信息?编辑
3、pom.xml
4、application文件
5、启动服务
?6、nocas服务列表
Feign 的RPC调用
Ribbon负载均衡
?Ribbon相关接口?编辑
?IRule
Spring Cloud Alibaba
注册中心-Nacos
Nacos下载以及安装
下载地址:https://github.com/alibaba/nacos/releases
选择版本可参考:
版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
Nacos 1.4.X
Nacos 2.X用的是grpc
?找到对应版本点击下载、解压
Windows 环境演示:
?进入nacos目录,
单机启动
第一种方法:startup.cmd -m standalone?
第二种方法:修改启动脚本改为单机模式:
set MODE="standalone"? ?
PS: 单机版不需要配置mysql
?启动成功,访问路径:http://localhost:8848/nacos/#/login
默认用户名密码:nacos / nacos
?2、集群模式
1)创建数据库nacos
2)将conf目录下的nacos-mysql.sql导入到数据库中
?3)修改conf目录下,的application.properties
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://localhost: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)修改配置文件名:cluster.conf.example 改为cluster.conf
#example
192.168.16.101:8848
192.168.16.102:8848
5)启动startup.cmd
Springboot服务搭建
一、新建微服务父项目
1、new project?选择maven
2、填写项目基本信息,完成parent项目初始化
?
?3、删除不需要的src文件夹
二、新建微服务
1、new module(可以选择Spring)
?2、填写微服务模块信息
3、pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tmall</groupId>
<artifactId>product</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>tmall-product-8020</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring.cloud.version>Hoxton.SR9</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
<spring.boot.version>2.3.2.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--nacos客户端-->
<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-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>org.junit.vintage</groupId>-->
<!-- <artifactId>junit-vintage-engine</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
<!-- </dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.2.RELEASE</version>
<configuration>
<mainClass>com.tmall.product.TmallProduct8020Application</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
4、application文件
# 应用名称
server.port=8010
spring.application.name=tmall-member-8010
spring.cloud.nacos.discovery.enabled=true
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
5、启动服务
?6、nocas服务列表
OpenFeign
Spring Cloud openfeign 对Feign增强了
Feign的负载均衡是通过Ribbon实现的
Spring Cloud Alibaba 整合OpenFeign
例如:tmall-order微服务调用tmall-product
1、两个微服务pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、两个微服务启动类上添加@EnableFeignClients
3、tmall-order新增openFeigh接口
@FeignClient(value="tmall-product",path = "/product")
public interface ProductFeignService {
@RequestMapping("/queryProductDetailByOrderId/{orderId}")
public String queryProductDetailByOrderId(@PathVariable("orderId") Long orderId);
}
4、tmall-order新增调用接口
@RestController
@RequestMapping("/order")
public class OrderController {
public static Logger logger = LoggerFactory.getLogger(OrderController.class);
@Autowired
private ProductFeignService productFeignService;
@RequestMapping(value = "/queryOrderDetail" , method = RequestMethod.POST)
public String queryOrderDetail(@RequestBody Map<String,Object> requestMap, HttpServletRequest request){
logger.info("queryOrderDetail 入参:"+ JSONObject.toJSONString(requestMap));
Long orderId = Long.valueOf(String.valueOf(requestMap.get("orderId"))) ;
return productFeignService.queryProductDetailByOrderId(orderId);
}
}
5、tmall-product新增对应接口
@RestController
@RequestMapping("/product")
public class ProductController {
public static Logger logger = LoggerFactory.getLogger(ProductController.class);
@RequestMapping(value = "/queryProductDetailByOrderId/{orderId}" , method = RequestMethod.GET)
public String queryProductDetailByOrderId(@PathVariable("orderId") Long orderId, HttpServletRequest request){
logger.info("queryOrderDetail 入参:"+ JSONObject.toJSONString(orderId));
return "lalala i'm product";
}
}
6、测试结果
Config配置中心
?
Spring Cloud Alibaba 整合Config配置中心
1、Nacos配置文件
配置中心数据是放在mysql中,修改nacos-server-1.4.2\nacos\conf下的application.propertise
数据库配置
#*************** Config Module Related Configurations ***************#
### 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=nacos
db.password.0=nacos
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
2、pom.xml添加依赖
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3、新建bootstrap.properties文件
#默认会找tmall-order.properties
spring.application.name=tmall-order
spring.cloud.nacos.config.server-addr=192.168.33.70:8848
#默认会找tmall-order-dev.properties
spring.profiles.active=dev
#默认会找tmall-order.properties
#spring.cloud.nacos.config.file-extension=yaml
logging.level.com.alibaba.cloud.nacos.client.NacosPropertySource=DEBUG
# 共享配置文件
# Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=tmall-order-common.yaml
# 配置Data Id所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true
# 扩展配置文件
# Data Id
spring.cloud.nacos.config.extension-configs[0].data-id=tmall-order-ext.properties
# 配置Data Id所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.extension-configs[2].group=DEFAULT_GROUP
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.extension-configs[2].refresh=true
Sentinel 分布式系统的流量防卫兵
Sentinel:以流量为切入点,可以从流量路由、流量控制、流量整形、熔断降级、自适应过载保护、热点流量防护等?
注意:这是阿里半开源的
高并发下:超时时间、线程池、资源隔离、服务限流、服务降级、服务熔断
Sentinel与Hiytrix对比
Spring Cloud Alibaba 整合Sentinel
1、下载sentinel控制台jar包
版本最好和本地匹配可参考:版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub
下载地址:
https://github.com/alibaba/Sentinel/releases
启动命令:java -jar sentinel-dashboard-1.8.1.jar
默认账号密码都是sentinel
?
2、修改配置文件
spring:
cloud:
nacos:
discovery:
enabled: true
username: nacos
password: nacos
server-addr: 127.0.0.1:8848
sentinel:
transport:
dashboard: 127.0.0.1:8080
feign:
client:
config:
tmall-product:
loggerLevel: FULL #FULL BASIC ...
3、调用一次接口后,可以看到微服务注册好了,
但是数据保存在内存中,未持久化,所以重启又会没了。?
4、通过配置台或者代码配置规则
Ribbon负载均衡
@LoadBalanced
?Ribbon相关接口
?IRule
最经常修改的是负载均衡策略,也可以自定义choose方法,自己写算法
默认是ZoneAvoidanceRule:默认负载均衡策略?
?pom.xml
因为spring-cloud-starter-alibaba-nacos-discovery会自动引入ribbon依赖所以不需要添加
|