<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Dubbo之高級(jí)特性

      Dubbo

      • 注意
        當(dāng)啟動(dòng)服務(wù)時(shí),該服務(wù)會(huì)占用本機(jī)一個(gè)端口號(hào),故在一臺(tái)電腦啟動(dòng)多個(gè)服務(wù)時(shí)需要在配置文件中更占用本機(jī)的端口號(hào)
      <!--服務(wù)占用本機(jī)的端口-當(dāng)本機(jī)啟動(dòng)多個(gè)服務(wù)時(shí)須保持不同-->
          <dubbo:protocol port=""/>
          <!--dubbo的配置-->
          <!--1.配置項(xiàng)目的名稱,唯一-->
          <dubbo:application name="dubbo-service"/>
          <!--2.配置注冊(cè)中心的地址-->
          <dubbo:registry address="zookeeper://192.168.23.129:2181" timeout="250000"/>
          <!--3.配置dubbo包掃描,注解注冊(cè)服務(wù)-->
          <!--	<dubbo:annotation package="com.yh1.impl" />-->
          <!--3.2xml配置方式注冊(cè)服務(wù),類上不需要注解-->
          <dubbo:service interface="com.yh.ours.UserService" ref="demoService"/>
          <bean id="demoService" class="com.yh1.impl.UserServiceImpl"/>
      
      

      序列化

      查詢出數(shù)據(jù)后返回給消費(fèi)者時(shí)所執(zhí)行的便是序列化

      • 作用:用于不同機(jī)器間傳輸對(duì)象的轉(zhuǎn)換,將對(duì)象序列化為 流數(shù)據(jù)進(jìn)行傳輸
      • 被序列化的對(duì)象類必須實(shí)現(xiàn)序列化接口Serializable
      • 接受到流數(shù)據(jù)后,反序列化為java對(duì)象
      • 序列化和反序列化兩者皆需要用到對(duì)象類,故定義在一個(gè)獨(dú)立模塊中,讓兩者依賴它—>類似于公共接口模塊
      • 即domain/pojo實(shí)體類皆需要實(shí)現(xiàn)接口Serializable且放在獨(dú)立模塊來作為資源被依賴
      <groupId>org.yh</groupId>
          <artifactId>debbo-interface</artifactId>
          <version>1.0-SNAPSHOT</version>
          <dependencies>
          <!--被依賴資源-->
              <dependency>
                  <groupId>org.yh</groupId>
                  <artifactId>dubbo-pojo</artifactId>
                  <version>1.0-SNAPSHOT</version>
              </dependency>
          </dependencies>
      

      在這里插入圖片描述

      序列化和反序列化操作dubbo已經(jīng)封裝好,只需讓pojo類實(shí)現(xiàn)接口即可

      eg:

      //必須實(shí)現(xiàn)Serializable
      //一個(gè)實(shí)體類用于 模仿序列化和反序列化操作
      public class User implements Serializable {
          int id;
          String name;
      
          public User() {
          }
      
          public User(int id, String name) {
              this.id = id;
              this.name = name;
          }
          //省略get和set方法
      
      

      Cotroller代碼

       @RequestMapping("/find.do")
          public User find(int id){
              return userService.findById(id);
          }
      
      

      在這里插入圖片描述

      地址緩存

      問:注冊(cè)中心掛了,服務(wù)是否可以正常訪問?
      答:可以,當(dāng)?shù)谝淮卧L問后,會(huì)將服務(wù)地址緩存至本地
      但是當(dāng)服務(wù)的地址變了以后就不行了,需要重新訪問注冊(cè)中心獲取

      超時(shí)和重試

      超時(shí)

      問:消費(fèi)者創(chuàng)建線程調(diào)用提供者服務(wù),如果調(diào)用失敗或者提供者查詢時(shí)間過長或掛了,則消費(fèi)者將一直等待

      • 可以在服務(wù)者方法中使用線程沉睡來模擬上述情況
      @Service
      public class UserServiceImpl implements UserService {
      	@Override
          public User findById(int id) {
              //此處讓服務(wù)睡5秒,用來演示超時(shí)操作
              try {
                  Thread.sleep(5000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              User user=new User(1,"jack");
              return user;
          }
      }
      
      

      解決:設(shè)置timeout屬性值來控制超時(shí)時(shí)間

      1. 在消費(fèi)方@reference注解中設(shè)置
      2. 在提供者@service注解中設(shè)置
      3. 在配置文件中配置
      <!--2.配置注冊(cè)中心的地址-->
          <dubbo:registry address="zookeeper://192.168.23.129:2181" timeout="250000"/>
      
      
      • 建議配置在服務(wù)提供方@Service上
      • 超時(shí)時(shí)消費(fèi)者報(bào)錯(cuò)如下
        在這里插入圖片描述

      重試

      問題:出現(xiàn)了網(wǎng)絡(luò)抖動(dòng)網(wǎng)突然斷了一下,斷了3s超時(shí)時(shí)間設(shè)置是1s,則這一次請(qǐng)求就會(huì)失敗,則會(huì)重新發(fā)送請(qǐng)求,一共發(fā)送3次
      解決1:通過retries屬性類設(shè)置重試次數(shù)。默認(rèn)為2

      多版本

      灰度發(fā)布:新功能時(shí),讓一部分用戶使用新版本,穩(wěn)定后讓全部用戶使用新的版本。

      在這里插入圖片描述
      使用:使用version屬性來設(shè)置和調(diào)用同一個(gè)接口的不同版本
      eg:公共接口模塊中的UserService接口在服務(wù)提供者中有倆實(shí)現(xiàn)類UserServiceImpl1和UserServiceImpl2
      在服務(wù)提供者的UserServiceImpl1@Service(version=“v1.0”)中設(shè)置version和UserServiceImpl2@Service(version=“v2.0”)
      在消費(fèi)者的@Reference(version=“v1.0 or v2.0”)中設(shè)置version來選擇使用哪個(gè)版本

      注:此處檢驗(yàn)失敗,原因未知

      負(fù)載均衡

      適用于集群環(huán)境,相同的服務(wù)部署在多臺(tái)機(jī)器上
      模擬步驟:
      1.在服務(wù)提供者的@Service注解中添加weight屬性,配置權(quán)重(可在服務(wù)內(nèi)打印一句話來區(qū)別不同的服務(wù))
      2.啟動(dòng)該服務(wù)tomcat7:run
      3.更改三個(gè)端口號(hào)后繼續(xù)1,2,3步驟,直至啟動(dòng)三個(gè)服務(wù)器為止,保持權(quán)重不同
      4.在消費(fèi)者的@reference注解中配置loadbalance屬性(共有四個(gè)值下面有)
      5.啟動(dòng)服務(wù),開始模擬

      • 負(fù)載均衡策略(4種):來解決訪問哪個(gè)機(jī)器
        可以更改同一個(gè)服務(wù)的tomcat,dubbo的qos,本機(jī)三個(gè)的端口來模擬同一服務(wù)部署在多臺(tái)機(jī)器
      1.
      <!--tomcat插件-->
                      <plugin>
                          <groupId>org.apache.tomcat.maven</groupId>
                          <artifactId>tomcat7-maven-plugin</artifactId>
                          <version>2.1</version>
                          <configuration>
                              <port>8000</port>
                              <path>/</path>
                          </configuration>
                      </plugin>
       2.
      <dubbo:protocol port="20881"/>
      3.
          <!--dubbo的配置-->
          <!--1.配置項(xiàng)目的名稱,唯一-->
          <dubbo:application name="dubbo-service">
              <!--dubbo的pos服務(wù)一個(gè)服務(wù)會(huì)啟動(dòng)一次,故一臺(tái)機(jī)器時(shí)不同服務(wù)需要更改-->
              <dubbo:parameter key="qos.port" value="33331"/>
          </dubbo:application>
      
      • 權(quán)重weight是服務(wù)提供者@Service注解的配置屬性
      1. Random按權(quán)重weight屬性隨機(jī)。按權(quán)重設(shè)置隨機(jī)概率
      2. RoundRobin按權(quán)重輪詢
      3. LeastActice最少活躍調(diào)用數(shù),相同則隨機(jī)–>使用機(jī)器中處理請(qǐng)求最快的的機(jī)器
      4. ConsisitentHash:一致性Hash,相同參數(shù)的請(qǐng)求總是發(fā)到同一提供者

      在這里插入圖片描述

      • 在消費(fèi)者的@Reference注解中使用loadbalance屬性(該屬性值為loadbalance抽象類的四種實(shí)現(xiàn)類屬性即上的小寫)來設(shè)置采用上述哪種負(fù)載均衡策略
        在這里插入圖片描述

      集群容錯(cuò)

      問題: 消費(fèi)者調(diào)用集群中某一機(jī)器出錯(cuò)了,該如何處理?

      • 集群容錯(cuò)模式:
      1. **Failover Cluster:**失敗重試。默認(rèn)值。當(dāng)出現(xiàn)失敗,重試其它服務(wù)器,默認(rèn)重試2次,使用retries配置。–一般用于讀操作
      2. **Failfast Cluster ??*快速失敗,發(fā)起-次調(diào)用,失敗立即報(bào)錯(cuò)。–通常用于寫操作。
      3. **Failsafe Cluster:**失敗安全,出現(xiàn)異常時(shí),直接忽略。返回一個(gè)空結(jié)果。–用于寫一些不重要的日志結(jié)果
      4. **Failback Cluster:**失敗自動(dòng)恢復(fù),后臺(tái)記錄失敗請(qǐng)求,定時(shí)重發(fā)。
      5. **Forking Cluster ??*并行調(diào)用多個(gè)服務(wù)器,只要一個(gè)成功即返回。–耗性能
      6. Broadcast Cluster: 廣播調(diào)用所有提供者,逐個(gè)調(diào)用,任意一臺(tái)報(bào)錯(cuò)則報(bào)錯(cuò)。–同步要求較高時(shí)使用,如同時(shí)更新三個(gè)機(jī)器上的數(shù)據(jù)
      • 在消費(fèi)者的@Reference注解中使用cluster屬性(該屬性值為cluster抽象類的四種實(shí)現(xiàn)類屬性即上的小寫)來設(shè)置采用上述哪種集群容錯(cuò)策略

      服務(wù)降級(jí)

      場景描述:
      在這里插入圖片描述

      • 當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實(shí)際業(yè)務(wù)情況及流量,對(duì)一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運(yùn)作或高效運(yùn)作
      • 服務(wù)降級(jí)方式:
      1. mock= force:return null:表示消費(fèi)方對(duì)該服務(wù)的方法調(diào)用都直接返回null值,不發(fā)起遠(yuǎn)程調(diào)用。用來屏蔽不重要服務(wù)不可用時(shí)對(duì)調(diào)用方的影響。

      2. mock=fail:return null:表示消費(fèi)方對(duì)該服務(wù)的方法調(diào)用在失敗后,再返回null值,不拋異常。用來容忍不重要服務(wù)不穩(wěn)定時(shí)對(duì)調(diào)用方的影響

      • 只需在消費(fèi)方配置
      @Reference(mock =“ force :return null")
      private UserService userService;
      posted @ 2021-02-26 22:37  唯愛編程  閱讀(147)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产线播放免费人成视频播放| 日韩人妻中文字幕精品| 免费网站看sm调教视频| 欧美黑人又粗又大又爽免费| 中文字幕一区二区久久综合| 高清国产一区二区无遮挡| 韩国无码AV片午夜福利| 国产AV大陆精品一区二区三区 | 仪征市| 国产麻豆成人传媒免费观看| 少妇人妻偷人精品系列| 巨熟乳波霸若妻在线播放| 久久久久青草线蕉亚洲| 一区二区三区四区自拍视频| 国产精品久久久尹人香蕉| 平山县| 日韩一区二区三区女优丝袜| 少妇人妻偷人免费观看| 边添小泬边狠狠躁视频| 亚洲乱妇老熟女爽到高潮的片| 日韩av一区二区精品不卡| 久国产精品韩国三级视频| 睢宁县| 亚洲精品区午夜亚洲精品区| 国产精品免费中文字幕| 日韩人妻无码精品久久久不卡| 国产精品无遮挡又爽又黄| 国产一区精品在线免费看| 中文字幕在线日韩一区| 成人免费亚洲av在线| 国产亚洲精品久久综合阿香| 国产精品日韩精品日韩| 亚洲欧美人成网站在线观看看| 国产乱码日韩精品一区二区| 免费人成网站免费看视频| 女人扒开腿让男人桶到爽| 精品视频国产狼友视频| 亚洲人成电影网站色mp4| 亚洲人成人无码www| 亚洲av综合色区在线观看| 久热这里只有精品12|