服務註冊中心 Nacos 官網:home (nacos.io) nacos-server下載地址:Releases · alibaba/nacos (github.com) 第一步:運行nacos-server nacos-server-2.1.1\nacos\bin 目錄下打開命令行視窗,輸入st ...
服務註冊中心 Nacos
官網:home (nacos.io)
nacos-server下載地址:Releases · alibaba/nacos (github.com)
第一步:運行nacos-server
nacos-server-2.1.1\nacos\bin
目錄下打開命令行視窗,輸入startup.cmd -m standalone
;訪問http://localhost:8848/nacos
,用戶名、密碼全部預設為 nacos
。
第二步:添加maven坐標
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacosdiscovery</artifactId>
</dependency>
第三步:寫YML配置文件
- 服務提供者
application.yml
## application.yml
server:
port:
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
- 服務消費者
application.yml
# 額外添加
service-url:
nacos-user-service: http://nacos-payment-provider
第四步:主啟動類添加 @EnableDiscoveryClient
服務配置中心 Nacos
第一步:添加maven坐標
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacosconfig</artifactId>
</dependency>
第二步:寫YML配置文件
springboot 讀取配置文件的優先順序:**bootstrap.yml > application.yml
bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos服務註冊中心地址
config:
server-addr: localhost:8848 # Nacos作為配置中心地址_
file-extension: yaml # 指定yaml格式的配置
namespace: # 命名空間id
group: DEV_GROUP
application.yml
spring:
profiles:
active: dev # 開發環境
第三步:添加 Spring Cloud 原生註解 @RefreshScope
實現配置自動更新
第四步:在nacos配置管理欄中添加新配置
DataID:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
Group:`${spring.cloud.nacos.config.group}
配置格式:YAML
第五步:配置持久化
- 執行SQL文件:
nacos-server-2.1.1\nacos\con\nacos-mysql.sql
- 修改配置文件:
nacos-server-2.1.1\nacos\con\application.properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=tr
db.user=
db.password=
服務介面調用 OpenFeign
第一步:添加maven坐標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
第二步:主啟動類添加 @EnableFeignClients
第三步:消費者業務介面添加 @FeignClient
- 消費者 service 介面
@Component
@FeignClient(value = "service-provider")
public interface FeignService {
@GetMapping(value = "/provider/getPort")
String getServerPortOfProvider();
}
- 提供者 controller類,服務名
service-provider
@RestController
public class ProviderController {
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/provider/getPort")
public String getServerPortOfProvider() {
return this.serverPort;
}
}
負載均衡服務調用 LoadBalancer
OpenFeign 內部依賴 loadBalancer。
服務網關 Gateway
第一步:添加maven坐標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
第二步:寫YML配置文件
spring:
cloud:
gateway:
discovery:
locator:
enabled: true # 開啟從註冊中心動態創建路由的功能,利用微服務名進行路由
routes:
- id: payment_routh #payment_route #路由的ID,沒有固定規則但要求唯一,建議配合服務名
uri: lb://cloud-payment-service #匹配後提供服務的路由地址
predicates:
- Path=/payment/get/** # 斷言,路徑相匹配的進行路由
- id: payment_routh2 #payment_route #路由的ID,沒有固定規則但要求唯一,建議配合服務名
uri: lb://cloud-payment-service #匹配後提供服務的路由地址
filters:
- AddRequestHeader=X-Request-red, blue # 更多Gateway filter配置到官網查看
predicates:
- Path=/payment/lb/** # 斷言,路徑相匹配的進行路由
- After=2017-01-20T17:42:47.789-07:00[America/Denver] # 更多斷言配置到官網查看
第三步:自定義 GlobalFilter
@Component
public class MyLogGateWayFilter implements GlobalFilter, Order {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String name = exchange.getRequest().getQueryParams().getFirst("name");
if (name == null) {
exchange.getResponse().setStatusCode(HttpStatus.MULTI_STATUS);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
@Override
public int value() {
return 0;
}
@Override
public Class<? extends Annotation> annotationType() {
return null;
}
}
服務熔斷和限流 Sentinel
官網:home (sentinelguard.io)
下載地址:Releases · alibaba/Sentinel (github.com)
第一步:運行
java -jar sentinel-dashboard-1.8.5.jar
訪問 sentinel 管理界面,賬號密碼均為 sentinel,http://localhost:8080
第二步:添加maven坐標
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- 用於流控規則持久化 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
第三步:寫YML配置文件
spring:
application:
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
#Nacos服務註冊中心地址
server-addr: localhost:8848
sentinel:
transport:
#配置Sentinel dashboard地址
dashboard: localhost:8080
#預設8719埠,假如被占用會自動從8719開始依次+1掃描,直至找到未被占用的埠
port: 8719
第四步:由於sentinel採用懶載入,需要執行一次訪問
流控、降級、熱點key限流、系統規則、@SentinelResource
、熔斷、規則持久化
分散式請求鏈路跟蹤 Sleuth
下載:Central Repository: io/zipkin/zipkin-server (maven.org)
第一步:運行
java -jar zipkin-server-2.23.8-exec.jar
第二步:添加maven 坐標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
第三步:寫YML 配置文件
spring:
application:
name:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
probability: 1
第四步:訪問瀏覽器界面
http://localhost:9411/
消息驅動 Stream
官網:Spring Cloud Stream
第一步:添加maven坐標
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>