Dubbo 服務提供方併發控制

2021-10-18 23:56:37 字數 3024 閱讀 4230

二. 原始碼分析

三. 使用

原始碼說明:

該類表示提供端服務介面(包括介面中所有服務方法)、消費端服務介面(包括介面中所有服務方法)的當前呼叫次數、總數、失敗數、呼叫間隔等狀態資訊

**中有詳細注釋,重點關注begincount方法、endcount方法

service_statistics/method_statistics是靜態變數,相當於快取

package org.apache.dubbo.rpc;

public

class

rpcstatus

/** * 根據 url 返回介面中服務方法的 rpcstatus 狀態

*/public

static rpcstatus getstatus

(url url, string methodname)

/** * 服務方法執行前判斷是否滿足併發控制要求

** @param url

* @param methodname 服務方法

* @param max 併發控制的數量

* @return false:併發數已達到,掛起當前執行緒,等待喚醒

* @return true: 併發數未達到,可以執行

*/public

static

boolean

begincount

(url url, string methodname,

int max)

for(

int i;;)

// 併發數未達到,返回true

if(methodstatus.active.

compareandset

(i, i +1)

)}// 介面所有服務方法正在執行中的數量加1

incrementandget()

;return

true;}

/** * 服務方法執行後減少相關引數值(包括併發控制次數)

** @param url

* @param methodname

* @param elapsed

* @param succeeded

*/public

static

void

endcount

(url url, string methodname,

long elapsed,

boolean succeeded)

private

static

void

endcount

(rpcstatus status,

long elapsed,

boolean succeeded)

if(succeeded)

}else}}

}

原始碼說明:

是服務提供端並且url有指定key(executes) filter才生效(@activate(group = commonconstants.provider, value = executes_key))

invoke:呼叫 rpcstatus.begincount 判斷是否滿足併發控制條件

rpcstatus.begincount返回false:直接拋異常。

onresponse/onerror:方法執行完成或發生異常則呼叫rpcstatus.endcount減去相應數量

package org.apache.dubbo.rpc.filter;

@activate

(group = commonconstants.provider, value = executes_key)

public

class

executelimitfilter

implements

filter

, filter.listener

invocation.

put(execute_limit_filter_start_time, system.

currenttimemillis()

);trycatch

(throwable t)

else}}

/** * 服務方法正常返回

** @param invoker

* @param invocation

*/@override

public

void

onresponse

?> invoker, invocation invocation)

/** * 服務方法異常

** @param t

* @param invoker

* @param invocation

*/@override

public

void

onerror

(throwable t, invoker<

?> invoker, invocation invocation)

} rpcstatus.

endcount

(invoker.

geturl()

, invocation.

getmethodname()

,getelapsed

(invocation)

,false);

}private

long

getelapsed

(invocation invocation)

}

public

static

void

main

(string[

] args)

throws ioexception

Dubbo 服務提供方併發控制

目錄二.原始碼分析 三.使用 原始碼說明 該類表示提供端服務介面 包括介面中所有服務方法 消費端服務介面 包括介面中所有服務方法 的當前呼叫次數 總數 失敗數 呼叫間隔等狀態資訊 中有詳細注釋,重點關注begincount方法 endcount方法 service statistics method...

Dubbo 消費端服務併發控制

二.原始碼分析 三.使用 原始碼說明 該類表示提供端服務介面 包括介面中所有服務方法 消費端服務介面 包括介面中所有服務方法 的當前呼叫次數 總數 失敗數 呼叫間隔等狀態資訊 中有詳細注釋,重點關注begincount方法 endcount方法 service statistics method s...

Dubbo併發控制和連線控制

限制com.foo.barservice的每個方法,伺服器端併發執行 或占用執行緒池執行緒數 不能超過10個 限制com.foo.barservice的sayhello方法,伺服器端併發執行 或占用執行緒池執行緒數 不能超過10個 1.2.1.控制到介面所有方法 限制com.foo.barservi...