日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
5分鐘實(shí)現(xiàn)SpringBoot整合Dubbo構(gòu)建分布式服務(wù)

5分鐘實(shí)現(xiàn)SpringBoot整合Dubbo構(gòu)建分布式服務(wù)

作者:佚名 2020-05-18 14:00:01

開發(fā)

架構(gòu)

分布式 Dubbo是Alibaba開源的分布式服務(wù)框架,它最大的特點(diǎn)是按照分層的方式來架構(gòu),使用這種方式可以使各個(gè)層之間解耦合。

創(chuàng)新互聯(lián)是一家專業(yè)提供石峰企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為石峰眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

概述:

Dubbo是Alibaba開源的分布式服務(wù)框架,它最大的特點(diǎn)是按照分層的方式來架構(gòu),使用這種方式可以使各個(gè)層之間解耦合(或者最大限度地松耦合)。從服務(wù)模型的角度來看,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務(wù),要么是消費(fèi)方消費(fèi)服務(wù),所以基于這一點(diǎn)可以抽象出服務(wù)提供方(Provider)和服務(wù)消費(fèi)方(Consumer)兩個(gè)角色。

我們來看一下Dubbo 的RPC 調(diào)用流程,這里主要涉及到4個(gè)模塊:

  •  Registry:服務(wù)注冊,我們一般會采取Zookeeper 作為我們的注冊中心
  •  Provider:服務(wù)提供者(生產(chǎn)者),提供具體的服務(wù)實(shí)現(xiàn)
  •  Consumer:消費(fèi)者,從注冊中心中訂閱服務(wù)
  •  Monitor:監(jiān)控中心,RPC調(diào)用次數(shù)和調(diào)用時(shí)間監(jiān)控

從上圖中我們可以了解到整個(gè)RPC 服務(wù)調(diào)用的過程主要為:

  •  生產(chǎn)者發(fā)布服務(wù)到服務(wù)注冊中心中
  •  消費(fèi)者在服務(wù)注冊中心中訂閱服務(wù)
  •  消費(fèi)者調(diào)用已經(jīng)注冊的服務(wù)

一、項(xiàng)目構(gòu)建

開發(fā)環(huán)境主要涉及以下幾個(gè)方面:

  •  Spring-boot
  •  JDK 8
  •  Dubbo
  •  Zookeeper

項(xiàng)目構(gòu)建通過: http://start.spring.io/ 快速構(gòu)建web 項(xiàng)目,具體操作可以參考

http://www.cnblogs.com/jaycekon/p/7562688.html

由于Dubbo 中需要使用到服務(wù)注冊中心,我們這里將使用Zookeeper 作為服務(wù)注冊中心,具體安裝配置,可以參考

http://www.cnblogs.com/jaycekon/p/7553909.html

在基礎(chǔ)環(huán)境確定好了之后,我們項(xiàng)目的目錄結(jié)構(gòu)如下:

上圖所示,我們項(xiàng)目主要分為了兩個(gè)模塊,一部分是生產(chǎn)者:spring-boot-dubbo ,一部分是:spring-boot-consumer。

整個(gè)項(xiàng)目的結(jié)構(gòu)非常簡單,這很符合Spring-Boot 的特性,簡單便捷,下面我們開始一步步的剖析整個(gè)項(xiàng)目的結(jié)構(gòu)

二、Productor

2.1、Pom.xml

項(xiàng)目依賴這一塊主要使用到了基本的Spring-Boot-Web 依賴,然后我們需要額外引入Dubbo 與Zookeeper的依賴(詳細(xì)依賴可參考源碼,博文底部會有項(xiàng)目Github 地址): 

  
 
 
 
  1.   
  2.             io.dubbo.springboot  
  3.             spring-boot-starter-dubbo  
  4.             1.0.0  
  5.           
  6.           
  7.             org.apache.zookeeper  
  8.             zookeeper  
  9.             3.4.6  
  10.               
  11.                   
  12.                     org.slf4j  
  13.                     slf4j-log4j12  
  14.                   
  15.                   
  16.                     log4j  
  17.                     log4j  
  18.                   
  19.               
  20.          

2.2、配置文件

由于我們底層使用的是Spring-Boot 進(jìn)行開發(fā),那么我們就應(yīng)該善于利用Spring-Boot 給我們帶來的優(yōu)勢,因此我們可以直接在Application.properties 文件中配置Dubbo 服務(wù): 

  
 
 
 
  1. ## Dubbo 服務(wù)提供者配置  
  2. spring.dubbo.application.name=provider    --服務(wù)名稱  
  3. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181   -- 注冊中心地址  
  4. spring.dubbo.protocol.name=dubbo     -- dubbo 協(xié)議  
  5. spring.dubbo.protocol.port=20880  
  6. spring.dubbo.scan=com.jaycekon.dubbo.service     --聲明需要暴露的服務(wù)接口 

如果不采用Spring-Boot 進(jìn)行自動配置,大家可以參考一下的配置xml 配置: 

  
 
 
 
  1.   
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5.        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  6.       
  7.       
  8.       
  9.       
  10.       
  11.       
  12.       
  13.       
  14.       

2.3、服務(wù)提供

在服務(wù)提供主要包括兩部分,一個(gè)是暴露服務(wù),一個(gè)是服務(wù)實(shí)現(xiàn)

暴露服務(wù):即我們平常開發(fā)中所使用的的接口,這里我們創(chuàng)建一個(gè) UserService 的接口,主要包括一個(gè)保存用戶的方法。 

  
 
 
 
  1. import com.jaycekon.dubbo.domain.User;  
  2. /**  
  3.  * Created by Jaycekon on 2017/9/19.  
  4.  */  
  5. public interface UserService {  
  6.     User saveUser(User user);  

服務(wù)實(shí)現(xiàn):服務(wù)實(shí)現(xiàn),與我們平常的服務(wù)一樣,對接口進(jìn)行實(shí)現(xiàn),比較特別的是,我們這里需要使用到Dubbo 的 @Service 注解。更多springboot實(shí)戰(zhàn)內(nèi)容,Java知音公眾號內(nèi)回復(fù)“springboot聚合” 

  
 
 
 
  1. import com.alibaba.dubbo.config.annotation.Service;  
  2. import com.jaycekon.dubbo.domain.User;  
  3. import com.jaycekon.dubbo.service.UserService;  
  4. /**  
  5.  * Created by Jaycekon on 2017/9/19.  
  6.  */  
  7. @Service  
  8. public class UserServiceImpl implements UserService {  
  9.     @Override  
  10.     public User saveUser(User user) {  
  11.         user.setId(1);  
  12.         System.out.println(user.toString());  
  13.         return user;  
  14.     }  

2.4、總體結(jié)構(gòu)

Dubbo 的服務(wù)提供端,已經(jīng)總體開發(fā)完成,非常簡單,總體的目錄結(jié)構(gòu)如下:

三、Consumer

3.1、pom.xml

消費(fèi)者的相關(guān)依賴,與生產(chǎn)者的依賴一致。 

  
 
 
 
  1.   
  2.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     4.0.0  
  4.     com.jaycekon  
  5.     spring-boot-consumer  
  6.     0.0.1-SNAPSHOT  
  7.     jar  
  8.     spring-boot-consumer  
  9.     Demo project for Spring Boot  
  10.       
  11.         org.springframework.boot  
  12.         spring-boot-starter-parent  
  13.         1.5.7.RELEASE  
  14.            
  15.       
  16.       
  17.         UTF-8  
  18.         UTF-8  
  19.         1.8  
  20.       
  21.       
  22.           
  23.             org.springframework.boot  
  24.             spring-boot-starter-web  
  25.           
  26.           
  27.             org.springframework.boot  
  28.             spring-boot-starter-test  
  29.             test  
  30.           
  31.           
  32.           
  33.             io.dubbo.springboot  
  34.             spring-boot-starter-dubbo  
  35.             1.0.0  
  36.           
  37.           
  38.             org.apache.zookeeper  
  39.             zookeeper  
  40.             3.4.6  
  41.               
  42.                   
  43.                     org.slf4j  
  44.                     slf4j-log4j12  
  45.                   
  46.                   
  47.                     log4j  
  48.                     log4j  
  49.                   
  50.               
  51.           
  52.           
  53.           
  54.             org.springframework  
  55.             springloaded  
  56.             1.2.3.RELEASE  
  57.           
  58.           
  59.             org.projectlombok  
  60.             lombok  
  61.             1.16.18  
  62.             provided  
  63.           
  64.       
  65.       
  66.           
  67.               
  68.                 org.springframework.boot  
  69.                 spring-boot-maven-plugin  
  70.               
  71.           
  72.       
  73.  

3.2、配置文件

配置文件與生產(chǎn)者稍有區(qū)別: 

  
 
 
 
  1. ## 避免和 server 工程端口沖突  
  2. server.port=8081 
  3. ## Dubbo 服務(wù)消費(fèi)者配置  
  4. spring.dubbo.application.name=consumer  
  5. spring.dubbo.registry.address=zookeeper://127.0.0.1:2181  
  6. spring.dubbo.scan=com.jaycekon.dubbo.service 

基于Xml 的配置: 

  
 
 
 
  1.   
  2.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  5.        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  6.       
  7.       
  8.       
  9.       
  10.       
  11.       
  12.       
  13.       
  14.       
  15.  

3.3、服務(wù)實(shí)現(xiàn)

在這里,如果我們需要調(diào)用注冊服務(wù)中的相關(guān)服務(wù),則需要實(shí)現(xiàn)相關(guān)的接口。 

  
 
 
 
  1. import com.jaycekon.dubbo.domain.User;  
  2. /**  
  3.  * Created by Jaycekon on 2017/9/19.  
  4.  */  
  5. public interface UserService {  
  6.     User saveUser(User user);  

例如,在這里我們需要使用到生產(chǎn)者中的 saveUser(User user) 方法,則需要創(chuàng)建一個(gè)接口,然后再調(diào)用時(shí),使用 @Reference 注解進(jìn)行引用: 

  
 
 
 
  1. import com.alibaba.dubbo.config.annotation.Reference;  
  2. import com.jaycekon.dubbo.domain.City;  
  3. import com.jaycekon.dubbo.domain.User; 
  4. import org.springframework.stereotype.Component;  
  5. /**  
  6.  * 城市 Dubbo 服務(wù)消費(fèi)者  
  7.  * 

      

  8.  * Created by Jaycekon on 20/09/2017.  
  9.  */  
  10. @Component  
  11. public class CityDubboConsumerService {  
  12.     @Reference  
  13.     CityDubboService cityDubboService;  
  14.     @Reference  
  15.     UserService userService;  
  16.     public void printCity() {  
  17.         String cityName = "廣州";  
  18.         City city = cityDubboService.findCityByName(cityName);  
  19.         System.out.println(city.toString());  
  20.     }  
  21.     public User saveUser() {  
  22.         User user = new User();  
  23.         user.setUsername("jaycekon")  
  24.                 .setPassword("jaycekong824");  
  25.         return userService.saveUser(user);  
  26.     }  

3.4、服務(wù)調(diào)用

最后,我們需要實(shí)現(xiàn)一個(gè)RESTful 接口,提供給用戶調(diào)用: 

  
 
 
 
  1. import com.jaycekon.dubbo.service.CityDubboConsumerService;  
  2. import org.springframework.beans.factory.annotation.Autowired;  
  3. import org.springframework.web.bind.annotation.RequestMapping;  
  4. import org.springframework.web.bind.annotation.RestController;  
  5. /**  
  6.  * Created by Jaycekon on 2017/9/19.  
  7.  */  
  8. @RestController  
  9. public class UserController {  
  10.     @Autowired  
  11.     private CityDubboConsumerService service;  
  12.     @RequestMapping("/save")  
  13.     public Object saveUser() { 
  14.         return service.saveUser();  
  15.     }  

3.5、目錄結(jié)構(gòu)

四、總結(jié)

本篇博客主要是博主在學(xué)習(xí)Spring-boot 的時(shí)候,總結(jié)下來的。在經(jīng)過一些列的對比后,感覺Dubbo 與Spring-Cloud 還是有點(diǎn)差距的,不管是從服務(wù)提供,還是社區(qū)活躍來說,Spring-Cloud 還是會強(qiáng)一點(diǎn)。但是由于公司內(nèi)部使用的是Dubbo,因此還是需要學(xué)習(xí)一下,后續(xù)的話,會對Spring-Cloud 進(jìn)行學(xué)習(xí)以及分項(xiàng)。

GitHub地址

https://github.com/jaycekon/SpringBoot 


文章標(biāo)題:5分鐘實(shí)現(xiàn)SpringBoot整合Dubbo構(gòu)建分布式服務(wù)
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/coppoep.html