溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解

發(fā)布時間:2020-10-25 10:00:38 來源:腳本之家 閱讀:179 作者:神牛步行3 欄目:編程語言

前言

  互聯(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注冊中心,正常啟動提示如:

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解  

  通常情況是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") ,到這里我們的服務提供端就完成了,查看下啟動日志:

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解  

  服務提供者啟動暫無異常,再來看調(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如下:

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解  

  然后分別啟動provider,consumer;再通過consumer暴露的controller接口請求接口,我這里的地址是 http://localhost:8082/users :

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解  

  效果是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工程,其他的暫可忽略;打開項目后,我們需要改的地方只有如下截圖配置(也可以對打包后的配置文件修改):

使用dubbo+zookeeper+spring boot構(gòu)建服務的方法詳解  

#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)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(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)容。

AI