W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
提示用戶dubbo使用的路由協(xié)議,介紹Dubbo-gov3采用的統(tǒng)一路由規(guī)則
路由規(guī)則,簡單來說就是根據(jù)特定的條件,將特定的請求流量發(fā)送到特定的服務(wù)提供者。從而實現(xiàn)流量的分配。
在 Dubbo3 統(tǒng)一路由規(guī)則的定義中,需要提供兩個yaml格式的資源:virtual service 和 destination rule。其格式和 service mesh 定義的路由規(guī)則非常相似。
定義host,用于和destination rule建立聯(lián)系。定義 service 匹配規(guī)則定義 match 匹配規(guī)則匹配到特定請求后,進行目標(biāo)集群的查找和驗證,對于為空情況,使用 fallback 機制。
定義特定集群子集,以及子集所適配的標(biāo)簽,標(biāo)簽從 provider 端暴露的 url 中獲取,并嘗試匹配。
sample示例參見Mesh Router
路由規(guī)則只針對客戶端,對于服務(wù)端,只需要在服務(wù)提供時打好特定的參數(shù)標(biāo)簽即可。
apiVersion: service.dubbo.apache.org/v1alpha1 kind: VirtualService metadata: {name: demo-route} spec: dubbo: # 使用正則表達式匹配service名,只有個滿足該service名的請求才能路由。 # 就此例子來說,不滿足service名的請求會直接找不到provider # - services: # - { regex: org.apache.dubbo.UserProvider* } - routedetail: - match: # 匹配規(guī)則,如果(sourceLabel)客戶端url滿足存在參數(shù) `trafficLabel: xxx` 的才能匹配成功 - sourceLabels: {trafficLabel: xxx} name: xxx-project route: # 一旦匹配上述match規(guī)則,將選擇 dest_rule 里定義的名為 isolation 的子集 - destination: {host: demo, subset: isolation} - match: - sourceLabels: {trafficLabel: testing-trunk} name: testing-trunk route: # 一旦匹配上述match規(guī)則,將選擇 dest_rule 里定義的名為 testing-trunk 的子集 - destination: {host: demo, subset: testing-trunk} - name: testing # 沒有match,兜底邏輯,上述不滿足后一定會被匹配到。 route: - destination: {host: demo, subset: testing} services: - {exact: com.apache.dubbo.sample.basic.IGreeter} hosts: [demo] # 匹配dest_rule.yml里面的 host 為demo
apiVersion: service.dubbo.apache.org/v1alpha1 kind: DestinationRule metadata: { name: demo-route } spec: host: demo subsets: - labels: { env-sign: xxx, tag1: hello } name: isolation - labels: { env-sign: yyy } name: testing-trunk - labels: { env-sign: zzz } name: testing trafficPolicy: loadBalancer: { simple: ROUND_ROBIN }
config-center: protocol: zookeeper address: 127.0.0.1:2181 data-id: "dubbo-go-samples-configcenter-zookeeper-client"
在代碼中通過 API 將配置發(fā)布至配置中心,也可預(yù)先手動配置。
dynamicConfiguration, err := config.GetRootConfig().ConfigCenter.GetDynamicConfiguration() if err != nil { panic(err) } // publish mesh route config err = dynamicConfiguration.PublishConfig("dubbo.io.MESHAPPRULE", "dubbo", MeshRouteConf) if err != nil { return }
server 端
dubbo: registries: demoZK: protocol: zookeeper timeout: 3s address: 127.0.0.1:2181 protocols: triple: name: tri port: 20000 provider: services: GreeterProvider: interface: com.apache.dubbo.sample.basic.IGreeter # must be compatible with grpc or dubbo-java params: env-sign: zzz # server label, 對應(yīng) destination Rule中的testing,即兜底邏輯
直接使用goland運行本示例
運行后,可觀測到所有客戶端流量都路由至 server,根據(jù)source label,沒有命中的virtualService,因此路由至兜底testing。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: