Spring Cloud Alibaba(四)--Gateway與Sentinel

cyclonefly0000發表於2020-12-10

1、這次主要是整合了Gateway和Sentinel,目前的呼叫鏈路是:

個人理解:

  • 對外提供的介面統統走閘道器,如果是內部系統呼叫,則沒必要走閘道器,直接通過RPC進行呼叫
  • service A可以呼叫 dao B,當然也可以直接呼叫 Service B來達到目的。直接呼叫dao B的原因前面的文章裡解釋過,問題在於是否可以直接呼叫Service B。之前看過孫玄的視訊,不建議service橫向呼叫,可以在service和dao之前再提取一層公共服務層,這樣就避免了橫向呼叫。他的原則是隻能從上往下呼叫。不過個人解決這個公共層其實很難提取出來,因為界限很模糊,實現起來費腦。我覺得直接橫向呼叫問題也不大,就像我們在做單體架構程式時,有時也會在相互平臺的service之間進行呼叫,減少程式碼複寫的情況。如果是簡單的互動介面可以直接呼叫dao,如果是複雜的業務邏輯,service B已經實現了,而且業務界限上也屬於service B,則橫向呼叫也合理。如果提取公共的服務介面層來避免橫向呼叫,那麼有個問題就是如果這個公共服務層提取的是一些和業務邏輯關係不太的服務還可以操作,如果業務本身就是屬於service B,那麼放到公共層也不太合理。(有更好的建議歡迎留言)

2、新增的依賴檔案為:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--# 該依賴提供了sentinel對spring cloud gateway框架的適配-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
        </dependency>
        <!--# 連線sentinel控制檯-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
        </dependency>

3、在Gateway與Sentile整合的時候主要新增的配置檔案為:

    sentinel:
      transport:
        #配置Sentin dashboard地址
        dashboard: localhost:8080
        # 預設8719埠,假如被佔用了會自動從8719埠+1進行掃描,直到找到未被佔用的 埠
        port: 8719
    gateway:
      routes:
        - id: provider
          uri: lb://iot-provider
          predicates:
            - Path=/api/provider/**
          filters:
            - RewritePath=/api/provider/(?<segment>.*),/$\{segment}
  • sentinel的Dashboard的服務地址
  • gateway的路由規則

4、如果監控controller介面,則只需要加上@SentinelResource(value="supplier-list")註解即可,同樣service方法也可以。

4、如果使用sentinel監控dubbo介面的呼叫,新增以下依賴即可:

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-dubbo-adapter</artifactId>
        </dependency>

程式碼連線 https://github.com/buff0000/iot tag:v0.0.4

相關文章