SpringCloud 學習總結

来源:https://www.cnblogs.com/HypoPine/archive/2022/09/26/16731679.html
-Advertisement-
Play Games

服務註冊中心 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

第五步:配置持久化

  1. 執行SQL文件:nacos-server-2.1.1\nacos\con\nacos-mysql.sql
  2. 修改配置文件: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

官網:Spring Cloud 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

官網:雲原生應用 (spring.io)

OpenFeign 內部依賴 loadBalancer。


服務網關 Gateway

官網:Spring Cloud 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>

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Python騷操作來了~ 用Python來實現科目一/四自動答題,100分不要太簡單! 最初是表弟最近想買車,但是駕照都沒有,買什麼車,只能先考駕照~ 看他在網頁上練習題目慢吞吞的,我就看不下去了,直接給他來一手揠苗助長~ 當時就用Python整了幾十行代碼,給他實現一下自動答題,我說你什麼時候答題 ...
  • 前幾天剛開始對PAT甲級的刷題,首次看到英語的題目,讓原本就菜的我更是頭禿,但第一題叫了n遍以後滿分通過的時候還是蠻爽的,在此僅記錄一下該題的個人解題心路,菜鳥記錄,技術極低。 Calculate a+b and output the sum in standard format -- that i ...
  • Java反射01 1.反射(reflection)機制 1.1反射機制問題 一個需求引出反射 請看下麵問題: 根據配置文件 re.properties 指定信息,創建Cat對象並調用方法hi classfullpath=li.reflection.Cat method=hi 使用現有的技術,你能做的 ...
  • java基礎 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 java常用類: 1.內部類 2.Object類 3.Object類常用方法 4.包裝類 5.String類 6.BigDecimal類 1、內部類 分類: 內部類:成員內部類,靜態內部類, 局部內部類,匿名內部類 概念:在一個類的 ...
  • 2022-09-26 組合數據類型: 列表 字典 集合 元組 拷貝: deep(深拷貝) shallow(淺拷貝) 區別:例如,文件中有一個指針指向另一塊存儲空間,如果是深拷貝則將指向的那一塊文件內容也全部拷貝,如果是淺拷貝那麼不需要將指針指向的內容進行拷貝,只拷貝第一層級的內容。指針指向的內容屬於 ...
  • 分散式ID策略 為什麼要用分散式ID? 在我們業務數據量不大的時候,單庫單表完全可以支撐現有業務,數據再大一點搞個 MySQL 主從同步讀寫分離也能對付。 但隨著數據日漸增長,主從同步也扛不住了,就需要對資料庫進行分庫分表,但分庫分表後需要有一個唯一ID來標識一條數據,資料庫的自增ID顯然不能滿足需 ...
  • 前言 大家早好、午好、晚好吖~ 知識點: 爬蟲基本流程 保存海量漫畫數據 requests的使用 base64解碼 開發環境: 版 本:python 3.8 編輯器:pycharm requests: pip install requests parsel: pip install parsel 如 ...
  • 上一篇文章我們學習了使用註解開發,但還沒有完全脫離xml的配置,現在我們來學習JavaConfig配置來代替xml的配置,實現完全註解開發。 下麵我們用一個簡單的例子來進行學習。 一、首先建立兩個實體類 User: package com.jms.pojo; import org.springfra ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...