真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Dubbo并發(fā)調(diào)優(yōu)的參數(shù)分別是什么-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Dubbo并發(fā)調(diào)優(yōu)的參數(shù)分別是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)、網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文營銷等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

消費端調(diào)優(yōu): 

一、connections 

這個參數(shù)可以在服務(wù)提供端發(fā)布服務(wù)的時候配置,也可以在消費端引用服務(wù)的時候配置,但是這個值是只對消費端生效的,所以一般是服務(wù)提供端不建議配置,如果配置,請斟酌一下。不管是在消費端或者服務(wù)提供端,如果對某個服務(wù)配置了connections參數(shù),并且該參數(shù)大于1,那么就會導(dǎo)致消費端在創(chuàng)建該服務(wù)的遠(yuǎn)程socketclient的時候(如果是dubbo協(xié)議的話)將會給該服務(wù)初始化一個私有的socketclient。所以一般不建議對這個值進(jìn)行調(diào)整。

服務(wù)端優(yōu)化調(diào)整:

相對余消費端,服務(wù)端調(diào)優(yōu)的參數(shù)相對多一些,但是配置的時候也需要謹(jǐn)慎。

一、executes 

這個參數(shù)是可以精確到方法級別的參數(shù),就是可以指定調(diào)用遠(yuǎn)程接口某個方法的是該參數(shù)的值。具體是怎么配置的可以到官方文檔里面去看看那,這里只是描述這個參數(shù)實際意義以及使用的時候應(yīng)該注意點。

要說這個參數(shù),就要所介紹ExecuteLimitFilter,他是這個參數(shù)使用者,看到Filter大家就應(yīng)該懂了,就是在每個方法請求前后加上業(yè)務(wù)邏輯。下面貼出里面的代碼:

@Activate(group = Constants.PROVIDER, value = Constants.EXECUTES_KEY)

public class ExecuteLimitFilter implements Filter {

  public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {

      URL url = invoker.getUrl();

      String methodName = invocation.getMethodName();

      int max = url.getMethodParameter(methodName, Constants.EXECUTES_KEY, 0);

      if (max > 0) {

          RpcStatus count = RpcStatus.getStatus(url, invocation.getMethodName());

          if (count.getActive() >= max) {

              throw new RpcException("Failed to invoke method " + invocation.getMethodName() + " in provider " + url + ", cause: The service using threads greater than limited.");

          }

      }

      long begin = System.currentTimeMillis();

      boolean isException = false;

      RpcStatus.beginCount(url, methodName);

      try {

          Result result = invoker.invoke(invocation);

          return result;

      } catch (Throwable t) {

          isException = true;

          if(t instanceof RuntimeException) {

              throw (RuntimeException) t;

          }

          else {

              throw new RpcException("unexpected exception when ExecuteLimitFilter", t);

          }

      }

      finally {

          RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, isException);

      }

  }

}

上面這段代碼主要是看兩個地方,分別是第7行和第10行,第7行是獲取配置的executes的值,是一個int類型的,描述數(shù)量,然后第10行是獲取當(dāng)前請求方法當(dāng)前的狀態(tài),里面既有一個active屬性(該屬性是AtomacInteger類型的,大家應(yīng)該懂了為什么用這個類型),表示當(dāng)前請求的方法處于執(zhí)行狀態(tài)的線程數(shù)量,如果這個值大于或者等于配置的值那么直接拋出異常,那么消費端就會收到一個RPC的異常導(dǎo)致調(diào)用服務(wù)失敗,這是這個參數(shù)最終導(dǎo)致的效果。 

二、actives   

這個參數(shù)基本上和excetes一樣,但是有一點不同,在說這不同之前,還是看看另一個Filter,看名字你們應(yīng)該就知道它是做什么的了—— ActiveLimitFilter,下面同樣貼出代碼:

@Activate(group = Constants.CONSUMER, value = Constants.ACTIVES_KEY)

public class ActiveLimitFilter implements Filter {

  public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {

      URL url = invoker.getUrl();

      String methodName = invocation.getMethodName();

      int max = invoker.getUrl().getMethodParameter(methodName, Constants.ACTIVES_KEY, 0);

      RpcStatus count = RpcStatus.getStatus(invoker.getUrl(), invocation.getMethodName());

      if (max > 0) {

          long timeout = invoker.getUrl().getMethodParameter(invocation.getMethodName(), Constants.TIMEOUT_KEY, 0);

          long start = System.currentTimeMillis();

          long remain = timeout;

          int active = count.getActive();

          if (active >= max) {

              synchronized (count) {

                  while ((active = count.getActive()) >= max) {

                      try {

                          count.wait(remain);

                      } catch (InterruptedException e) {

                      }

                      long elapsed = System.currentTimeMillis() - start;

                      remain = timeout - elapsed;

                      if (remain <= 0) {

                          throw new RpcException("Waiting concurrent invoke timeout in client-side for service:  "

                                                 + invoker.getInterface().getName() + ", method: "

                                                 + invocation.getMethodName() + ", elapsed: " + elapsed

                                                 + ", timeout: " + timeout + ". concurrent invokes: " + active

                                                 + ". max concurrent invoke limit: " + max);

                      }

                  }

              }

          }

      }

      try {

          long begin = System.currentTimeMillis();

          RpcStatus.beginCount(url, methodName);

          try {

              Result result = invoker.invoke(invocation);

              RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, true);

              return result;

          } catch (RuntimeException t) {

              RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, false);

              throw t;

          }

      } finally {

          if(max>0){

              synchronized (count) {

                  count.notify();

              }

          }

      }

  }

}

上面代碼大致上和executes一樣,唯一不同的就是多了一個等待時間,當(dāng)當(dāng)前執(zhí)行該方法的線程超出了大限制,那么可以等待一個timeout時間,如果時間過了還是超出了大限制,那么就拋出異常。這個相對余executes來說溫柔那么點。這就是那點不同! 

三、accepts 

在看代碼之前先看看這個參數(shù)的意思,這個參數(shù)是告知服務(wù)提供端能接收多少個消費端連接該服務(wù)提供方。下面接著上代碼,這個參數(shù)的體現(xiàn)是在類AbstractServer中。代碼如下:

要說這個參數(shù),就要所介紹ExecuteLimitFilter,他是這個參數(shù)使用者,看到Filter大家就應(yīng)該懂了,就是在每個方法請求前后加上業(yè)務(wù)邏輯。下面貼出里面的代碼:

@Override

  public void connected(Channel ch) throws RemotingException {

      Collection channels = getChannels();

      if (accepts > 0 && channels.size() > accepts) {

          logger.error("Close channel " + ch + ", cause: The server " + ch.getLocalAddress() + " connections greater than max config " + accepts);

          ch.close();

          return;

      }

      super.connected(ch);

  }

這個方法是每個消費端向服務(wù)提供端創(chuàng)建一個socket連接的時候都會觸發(fā),上面可以清晰看到如果連接當(dāng)前服務(wù)端的消費端數(shù)量超出了配置的值,那么將會關(guān)閉當(dāng)前消費端連接的請求。這個只是對socket連接的數(shù)量限制,而不是像上面兩個參數(shù)對調(diào)用線程的配置。 

以上歸納出的幾個參數(shù)建議服務(wù)端生效的在服務(wù)端配置,消費端生效的在消費端配置,不然會導(dǎo)致一些不可控的現(xiàn)象出現(xiàn)。這也叫改哪里的東西就應(yīng)該在哪里,而不能亂放。

上述就是小編為大家分享的Dubbo并發(fā)調(diào)優(yōu)的參數(shù)分別是什么了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道。

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。


網(wǎng)頁名稱:Dubbo并發(fā)調(diào)優(yōu)的參數(shù)分別是什么-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/idsjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部