Dubbo 集群容錯

2021-10-18 16:24:47 字數 3295 閱讀 4784

二. dubbo集群容錯模式

三. cluster介面及實現類結構圖

四. 原始碼解析

4. 其它模式(參考原始碼)

五. 實現自定義cluster

六. 使用自定義cluster

// 這裡不是使用所有服務提供者初始化invoked物件,只是使用了指定長度初始化空的list陣列

list

> invoked =

newarraylist

<

>

(copyinvokers.

size()

);set

providers =

newhashset

<

>

(len)

;// 容錯集群,重試呼叫

for(

int i =

0; i < len; i++

)// 根據複雜均衡策略選擇乙個服務提供者

invoker

invoker =

select

(loadbalance, invocation, copyinvokers, invoked)

; invoked.

add(invoker)

; rpccontext.

getcontext()

.setinvokers

((list) invoked)

;try

return result;

}catch

(rpcexception e)

le = e;

}catch

(throwable e)

finally

}// 簡化**

throw

newrpcexception()

;}

package org.apache.dubbo.demo.consumer.cluster;

import org.apache.dubbo.rpc.invoker;

import org.apache.dubbo.rpc.rpcexception;

import org.apache.dubbo.rpc.cluster.cluster;

import org.apache.dubbo.rpc.cluster.directory;

public

class

mycluster

implements

cluster

}

package org.apache.dubbo.demo.consumer.cluster;

protected result doinvoke

(invocation invocation, list

> invokers, loadbalance loadbalance)

throws rpcexception

// 2.檢查是否有可用invoker

checkinvokers

(invokers, invocation)

;// 3.根據指定ip獲取對應invoker(選取 服務提供者ip等於指定ip的invoker)

invoker

invoked = invokers.

stream()

.filter

(invoker -

> invoker.

geturl()

.gethost()

.equals

(ip)).

findfirst()

.orelsethrow((

)->

newrpcexception()

);// 4. 使用選取的invoker發起遠端呼叫,失敗則丟擲異常

trycatch

(throwable e)

}

public

static

void

main

(string[

] args)

Dubbo 集群容錯

在進行系統設計時候,不僅要考慮正常邏輯該如何走,還要考慮異常邏輯。dubbo中當服務消費方呼叫服務提供方的服務出現錯誤時候,提供了多種容錯方案,預設為 failover 重試。重試。當服務消費方呼叫服務提供者失敗後自動切換,重試其它服務提供者。這通常用於讀操作或者具有冪等的寫操作,需要注意的是重試會...

dubbo 集群容錯

在集群呼叫失敗時,dubbo 提供了多種容錯方案,預設為 failover 重試。集群容錯模式 failover cluster 失敗自動切換,當出現失敗,重試其它伺服器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries 2 來設定重試次數 不含第一次 重試次數配置如下 dubbo se...

dubbo 集群容錯

在收到提供者執行的結果時,當結果處理失敗時,需要對其進行處理。在reference中,返回的invoker是根據對應的容錯機制生成的invoker spi failovercluster.name public inte ce clusterpublic class failovercluster ...