您好,登錄后才能下訂單哦!
前言
互聯(lián)網(wǎng)的發(fā)展,網(wǎng)站應用的規(guī)模不斷擴大,常規(guī)的垂直應用架構(gòu)已無法應對,分布式服務架構(gòu)以及流動計算架構(gòu)勢在必行,Dubbo是一個分布式服務框架,在這種情況下誕生的。現(xiàn)在核心業(yè)務抽取出來,作為獨立的服務,使前端應用能更快速和穩(wěn)定的響應。
Dubbo是什么
Dubbo是Alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構(gòu),使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務,要么是消費方消費服務,所以基于這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。關(guān)于注冊中心、協(xié)議支持、服務監(jiān)控等內(nèi)容
Dubbo能做什么
當網(wǎng)站變大后,不可避免的需要拆分應用進行服務化(微服務),以提高開發(fā)效率,調(diào)優(yōu)性能,節(jié)省關(guān)鍵競爭資源等。
當服務越來越多時,服務的URL地址信息就會爆炸式增長,配置管理變得非常困難,F(xiàn)5硬件負載均衡器的單點壓力也越來越大。
當進一步發(fā)展,服務間依賴關(guān)系變得錯蹤復雜,甚至分不清哪個應用要在哪個應用之前啟動,架構(gòu)師都不能完整的描述應用的架構(gòu)關(guān)系。
接著,服務的調(diào)用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什么時候該加機器?等等……
在遇到這些問題時,都可以用Dubbo來解決。
本次和大家分享的是dubbo框架應用的初略配置和zookeeper注冊中心的使用;說到注冊中心現(xiàn)在我使用過的只有兩種:zookeeper和Eureka,zk我結(jié)合dubbo來使用,而Eureka結(jié)合springcloud使用,因此后面將和大家分享一些關(guān)于微服務的一些篇章,希望對你有好的幫助。
安裝注冊中心zookeeper
dubbo框架之provider和consumer
dubbo-admin部署
安裝注冊中心zookeeper
首先,我們需要在網(wǎng)上搜索下zookeeper下載地址,我這里是linux系統(tǒng),所以下載了zookeeper-3.3.6.tar.gz包,通過 tar -zxvf zookeeper-3.3.6.tar.gz 解壓出來,需要注意的是一般的包里面配置文件都是默認的sample版本,zookeeper默認配置文件名只zoo.cfg,為了不每次指定文件名來運行,因此需要我們自己在conf目錄下創(chuàng)建一個名稱為zoo.cfg的配置文件,文件內(nèi)容可以從zoo_sample.cfg拷貝或者把這個文件重命名都行,內(nèi)容如下 vim zoo.cfg :
# The number of milliseconds of each tick tickTime=2000 #心跳頻率 # The number of ticks that the initial # synchronization phase can take initLimit=10 #限制連接 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/tmp/zookeeper #數(shù)據(jù)存儲文件夾 # the port at which the clients will connect clientPort=2081 #zookeeper對外的端口
這里就不修改參數(shù)信息了,采用默認;簡單介紹下linux下怎么編輯文件內(nèi)容的常用的幾個命令:
vim zoo.cfg:查看文件內(nèi)容
insert:執(zhí)行插入命令
esc:取消命令,再接著按:q:退出,:wq:保存并退出
當有了zoo.cfg后,我們只需要進入她的bin目錄里面查找zkServer.sh文件,通過執(zhí)行: ./zkServer.sh start 命令啟動zookeeper注冊中心,正常啟動提示如:
通常情況是zookeeper作為注冊中心在單獨的一臺服務器上,而程序(這里指我本地)需要調(diào)用另外注冊中心需要檢查zookeeper開放的端口是否能通,我本地是window10因此可以不需要通過zookeeper客戶端去驗證端口,只需要通過 telnet ip 2081 就能檢測出是否端口開放;
dubbo框架之provider和consumer
首先為了方便,我們需要定義一個統(tǒng)一的接口,該接口就是業(yè)務抽出來的公用接口,我們單獨對這種接口包裝成一個module,我這里是dubbo_api,我們在這個module中定義如下的接口:
public interface UserService { List<MoUser> getUsers(); }
然后,創(chuàng)建一個provider模塊,這個模塊去依賴dubbo_api模塊,并且實現(xiàn)UserService接口,代碼如:
public class UserServiceImpl implements UserService { @Value("${server.port}") private int port; /** * @return */ @Override public List<MoUser> getUsers() { List<MoUser> list = new ArrayList<>(); for (int i = 0; i < 5; i++) { MoUser user = new MoUser(); user.setUserName("shenniu" + i); user.setUserPwd("端口:" + port); list.add(user); } return list; } }
作為服務提供者,要使用dubbo框架就需要先引入dubbo,然后再做一些配置,首先我們需要在dubbo_provider模塊通過maven引入dubbo依賴,注冊中心用的zookeeper所以也需要通過maven引入相應的依賴:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.example</groupId> <artifactId>dubbo_api</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
完成依賴后,剩下的就是對dubbo的provider的配置了,創(chuàng)建resources/dubbo-conf/server.xml的配置文件,文件內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供者名稱 --> <dubbo:application name="demo-provider" /> <!-- zookeeper注冊中心的服務地址 --> <dubbo:registry protocol="zookeeper" address="192.168.168.168:2081" /> <!-- 用dubbo協(xié)議在20880端口暴露服務,協(xié)議通信端口 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 用戶服務接口 --> <dubbo:service interface="service.UserService" ref="userService" /> <!-- 用戶服務接口實現(xiàn) --> <bean id="userService" class="com.example.demo.service.UserServiceImpl"/> </beans>
在DubboProviderApplication入口增加資源導入 @ImportResource("classpath:dubbo-conf/*.xml") ,到這里我們的服務提供端就完成了,查看下啟動日志:
服務提供者啟動暫無異常,再來看調(diào)用方創(chuàng)建一個dubbo_consumer的moduel,同樣去引入dubbo_api公共接口的模塊依賴,然后創(chuàng)建一個UserController,并暴露一個get的user接口:
@RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public List<MoUser> getUsers(){ return userService.getUsers(); } }
這里的UserService是公共接口的注入;編碼完成后剩下的就是consumer端引入dubbo和zookeeper依賴了:
<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.8</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency>
我們同樣創(chuàng)建名稱resources/dubbo-conf/client.xml的配置文件,并在application入口引入這個資源:
@ImportResource("classpath:dubbo-conf/*.xml") @SpringBootApplication public class DubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerApplication.class, args); } }
client.xml的配置內(nèi)容如:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 服務名 --> <dubbo:application name="demo-consumer" /> <!-- zookeeper注冊中心暴露服務地址 --> <dubbo:registry protocol="zookeeper" address="192.168.168.168:2081" /> <!-- 用戶服務接口 --> <dubbo:reference id="userService" interface="service.UserService" /> </beans>
這個時候一個簡單的服務提供者,服務調(diào)用者配置和編碼都完成了,3個module如下:
然后分別啟動provider,consumer;再通過consumer暴露的controller接口請求接口,我這里的地址是 http://localhost:8082/users :
效果是Consumer通過注入的UserService接口依賴調(diào)用getUsers()拿到了Provider返回的結(jié)果,也表示此次dubbo框架的簡單使用算成功了。
dubbo-admin部署
作為一個流行的rpc框架dubbo有這一個開源的監(jiān)控工具dubbo-admin,不得不說現(xiàn)在網(wǎng)上現(xiàn)成的dubbo-admin.war包要么現(xiàn)在下來不能用要么就是下載需要csdn積分,版本多種多樣有點坑啊,果斷去git拉源碼自己打包,git地址: https://github.com/apache/incubator-dubbo-ops ,拉下來后我們只需要關(guān)注dubbo-admin工程,其他的暫可忽略;打開項目后,我們需要改的地方只有如下截圖配置(也可以對打包后的配置文件修改):
#zookeeper配置地址和端口 dubbo.registry.address=zookeeper://127.0.0.1:2081 #后臺登錄密碼 dubbo.admin.root.password=root dubbo.admin.guest.password=guest
執(zhí)行打包后,能得到名稱:dubbo-admin-2.0.0.war包,然后放在tomcat中,再通過瀏覽器瀏覽,賬號和密碼:都是root;登錄后能看到我們之前的啟動的provider和consumer在里面,這就是dubbo-admin監(jiān)控注冊中心服務的界面,能夠直接對這些服務做點擊操作,其他的不多說自行嘗試吧?!?/p>
git地址: https://github.com/shenniubuxing3 nuget發(fā)布包:https://www.nuget.org/profiles/shenniubuxing3
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。