欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Dubbo的學(xué)習(xí)筆記

柚子快報邀請碼778899分享:Dubbo的學(xué)習(xí)筆記

http://yzkb.51969.com/

目錄

架構(gòu)

zookeeper的簡單介紹

簡單案例

Dubbo-admin的簡單使用

Dubbo高級特性

序列化

地址緩存

超時與重試

多版本

負(fù)載均衡

集群容錯

服務(wù)降級

Dubbo是阿里巴巴開源的一個高性能、輕量級RPC框架

架構(gòu)

provider:暴露服務(wù)的服務(wù)提供方container:服務(wù)運行容器consumer:調(diào)用遠程服務(wù)的服務(wù)消費方registry:服務(wù)注冊與發(fā)現(xiàn)的注冊中心monitor:統(tǒng)計服務(wù)的調(diào)用次數(shù)和調(diào)用時間的監(jiān)控中心

zookeeper的簡單介紹

Dubbo建議使用Zookeeper作為服務(wù)注冊中心

Zookeeper安裝有兩個需要注意的地方,首先是需要修改conf目錄下的zoo_sample.cfg文件名,因為Zookeeper的生效配置文件名叫zoo.cfg,其次,需要修改該文件中的數(shù)據(jù)存放路徑,最好和zookeeper安裝目錄同一路徑

zookeeper的啟動,去bin目錄下執(zhí)行如下命令

zkServer.sh start

查看zookeeper的狀態(tài)

./zkServer.sh status

創(chuàng)建一個簡單MVC項目后續(xù)我們在該項目上添加Dubbo

簡單案例

一個Service模塊一個Web模塊,結(jié)構(gòu)如下

@RestController

@RequestMapping("/user")

public class UserController {

@Autowired

private UserService userService;

@RequestMapping("/sayHello")

public String sayHello(){

return userService.sayHello();

}

}

@Service

public class UserServiceImpl implements UserService {

@Override

public String sayHello() {

return "hello dubbo";

}

}

啟動服務(wù)查看運行情況

接下來我們在此基礎(chǔ)上加入Dubbo的使用

修改Service中的Service注解為dubbo中的注解,原先的Service注解是將UserService注冊到Spring中的IOC容器當(dāng)中,現(xiàn)在我們不需要由Spring管理,而是通過dubbo來遠程調(diào)用,因此修改此處的Serivce注解

修改application.xml配置文件,添加dubbo的配置

補全Service的目錄結(jié)構(gòu)就可以啟動dubbo-service模塊了

此時修改dubbo-web模塊,首先去掉pom文件中的dubbo-service模塊的引用,這時Controller中就會報錯,為了避免報錯,我們需要在本地創(chuàng)建一個對應(yīng)的UserSerivce接口來進行注入,但由于不是Spring注入了,我們還需要修改注入注解為Dubbo的遠程注入注解

@RestController

@RequestMapping("/user")

public class UserController {

/**

* 1.從注冊中心獲取userService的訪問url

* 2.進行遠程調(diào)用RPC

* 3.將結(jié)果封裝為一個代理對象,給變量賦值

* */

@Reference

private UserService userService;

@RequestMapping("/sayHello")

public String sayHello(){

return userService.sayHello();

}

}

這是我們需要在web模塊同樣添加一份dubbo的配置信息

修改完畢后,就可以啟動web模塊了。在啟動過程中會報一個錯誤

這個錯誤指的是端口占用,這是因為我們是一臺機器運行了兩個dubbo服務(wù),在生產(chǎn)環(huán)境中不會出現(xiàn)這個錯誤,但是這個錯誤不會影響程序運行。如果不希望出現(xiàn)該錯誤信息,我們可以修改dubbo的配置文件,添加一個修改端口的參數(shù)即可

此時我們的項目結(jié)構(gòu)大致如下

我們實現(xiàn)兩個模塊調(diào)用時,在web層創(chuàng)建了service層的接口,但是在開發(fā)時接口可能存在很多,方法也有很多,我們不一定保證在開發(fā)時保證不出錯,因此,我們存在一個更好的解決方案,那就是再創(chuàng)建一個公共模塊,web與service共同依賴該模塊,那么結(jié)構(gòu)就變成下面這張圖了

新創(chuàng)建一個接口模塊

我們將service與web模塊中的接口刪除,然后在pom文件中引入接口模塊,導(dǎo)入接口模塊中的接口即可。

Dubbo-admin的簡單使用

dubbo-admin管理平臺,是圖形化的服務(wù)管理頁面

從注冊中心中獲取到所有的提供者/消費者進行配置管理

路由規(guī)則、動態(tài)配置、服務(wù)降級、訪問控制、權(quán)重調(diào)整、負(fù)載均衡等管理功能

下載完并解壓后根據(jù)下面步驟進行即可

1、在dubbo-admin-server里面中找到application.properties修改zookeeper的地址

如果修改了需要在dubbo-admin-server目錄執(zhí)行mvn clean install -Dmaven.test.skip=true

2、在dubbo-admin-distribution中找到tager目錄下的jar包運行完成后

3、在dubbo-admin-ui中執(zhí)行npm run dev

Dubbo高級特性

序列化

在開發(fā)時,pojo模塊里面的實體類都要實現(xiàn)Serializable接口,目的是序列化,傳輸數(shù)據(jù)

地址緩存

注冊中心掛了的話,服務(wù)還是可以進行正常訪問的。

原因:dubbo服務(wù)消費者在第一次調(diào)用時,會將服務(wù)提供方地址緩存到本地,以后再調(diào)用則不會訪問注冊中心。當(dāng)服務(wù)提供地址發(fā)生改變時,注冊中心會通知服務(wù)消費者。

超時與重試

服務(wù)消費者在調(diào)用服務(wù)提供者的時候發(fā)生了阻塞、等待的情形,這個時候,服務(wù)消費者會一直等待下去。在某個峰值時刻,大量請求都在同時請求服務(wù)消費者,會造成線程的大量堆積,勢必會造成雪崩,Dubbo利用超時機制來解決這個問題,設(shè)置一個超時時間,在這個時間段內(nèi),無法完成服務(wù)訪問則自動斷開連接。

設(shè)置連接超時timeout(默認(rèn)為1000ms)可以在服務(wù)生產(chǎn)方與服務(wù)消費方兩個地方設(shè)置,兩個地方都設(shè)置timeout的話,服務(wù)消費者處的設(shè)置優(yōu)先生效(但不推薦),一般只在服務(wù)生產(chǎn)者者里設(shè)置超時時間,因為只有服務(wù)生產(chǎn)者處知道自己的服務(wù)壓力是否過大。

連接超時的話,會進行重試操作retries,默認(rèn)是重試兩次,一共發(fā)起三次請求

多版本

當(dāng)我們需要讓服務(wù)消費者從版本2處獲取服務(wù)時,dubbo會讓一部分用戶先使用新功能,用戶反饋沒問題之后再將所有的用戶遷移到新的服務(wù)提供方,這稱之為灰度發(fā)布。dubbo中使用version屬性來設(shè)置和調(diào)用同一個接口的不同版本。

@Service(version = "1.0") //將這個類提供的方法對外發(fā)布,將訪問的地址ip,端口,路徑注冊到注冊中心

public class UserServiceImpl implements UserService {

@Override

public String sayHello() {

return "hello dubbo";

}

@Override

public User findUserById(int id) {

User user = new User(1, "zhangsan");

return user;

}

}

@RestController

@RequestMapping("/user")

public class UserController {

/**

* 1.從注冊中心獲取userService的訪問url

* 2.進行遠程調(diào)用RPC

* 3.將結(jié)果封裝為一個代理對象,給變量賦值

* */

@Reference(version = "1.0")

private UserService userService;

@RequestMapping("/sayHello")

public String sayHello(){

return userService.sayHello();

}

@RequestMapping("/findById")

public User findByUser(int id){

return userService.findUserById(id);

}

}

負(fù)載均衡

負(fù)載均衡的四種策略:

Random:根據(jù)權(quán)重比例隨機分配(這個是默認(rèn))RoundRobin:按權(quán)重輪詢(1、2、3按著順序來)LeastActive:最少活躍調(diào)用數(shù),相同時隨機ConsistentHash:一致性Hash,相同參數(shù)的請求總是發(fā)到統(tǒng)一提供者。

集群容錯

集群容錯模式:

Failover Cluster:即上面的超時重試。失敗重試一般用于讀操作,寫操作可能會出現(xiàn)多次寫入重復(fù)Failfast Cluster:快速失敗,只發(fā)起一次調(diào)用,通常用于寫的操作Failsafe Cluster:失敗安全,出現(xiàn)異常時,直接忽略,返回一個空結(jié)果Failback Cluster:失敗自動恢復(fù),后臺記錄失敗請求,定時重發(fā)Forking Cluster:并行調(diào)用多個服務(wù)器,只要一個成功即返回。Broadcast Cluster:廣播調(diào)用所有的提供者,逐個調(diào)用,任意一臺報錯則報錯

服務(wù)降級

服務(wù)降級:(服務(wù)器在掛掉的邊緣時,釋放一些不重要的服務(wù)來維持核心服務(wù)的使用)

mock=force:return null :表示消費方對該服務(wù)的方法調(diào)用都直接返回null值,不發(fā)起遠程調(diào)用。用來屏蔽不重要服務(wù)不可用時對調(diào)用方的影響mock=fail:return null :表示消費方對服務(wù)的方法調(diào)用在失敗后,在返回null值,不拋異常。用來容忍不重要服務(wù)不穩(wěn)定時對調(diào)用方的影響

柚子快報邀請碼778899分享:Dubbo的學(xué)習(xí)筆記

http://yzkb.51969.com/

參考鏈接

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18844001.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機訪問

文章目錄