日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

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

開發(fā)

架構(gòu)

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

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

概述:

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

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

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

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

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

一、項目構(gòu)建

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

  •  Spring-boot
  •  JDK 8
  •  Dubbo
  •  Zookeeper

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

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

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

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

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

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

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

二、Productor

2.1、Pom.xml

項目依賴這一塊主要使用到了基本的Spring-Boot-Web 依賴,然后我們需要額外引入Dubbo 與Zookeeper的依賴(詳細(xì)依賴可參考源碼,博文底部會有項目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 進行開發(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 進行自動配置,大家可以參考一下的配置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ù)提供主要包括兩部分,一個是暴露服務(wù),一個是服務(wù)實現(xiàn)

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

  
 
 
 
  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ù)實現(xiàn):服務(wù)實現(xiàn),與我們平常的服務(wù)一樣,對接口進行實現(xiàn),比較特別的是,我們這里需要使用到Dubbo 的 @Service 注解。更多springboot實戰(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

消費者的相關(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ù)消費者配置  
  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ù)實現(xiàn)

在這里,如果我們需要調(diào)用注冊服務(wù)中的相關(guān)服務(wù),則需要實現(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)建一個接口,然后再調(diào)用時,使用 @Reference 注解進行引用: 

  
 
 
 
  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ù)消費者  
  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)用

最后,我們需要實現(xiàn)一個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 的時候,總結(jié)下來的。在經(jīng)過一些列的對比后,感覺Dubbo 與Spring-Cloud 還是有點差距的,不管是從服務(wù)提供,還是社區(qū)活躍來說,Spring-Cloud 還是會強一點。但是由于公司內(nèi)部使用的是Dubbo,因此還是需要學(xué)習(xí)一下,后續(xù)的話,會對Spring-Cloud 進行學(xué)習(xí)以及分項。

GitHub地址

https://github.com/jaycekon/SpringBoot 


網(wǎng)頁標(biāo)題:5分鐘實現(xiàn)SpringBoot整合Dubbo構(gòu)建分布式服務(wù)
文章源于:http://www.5511xx.com/article/coppoep.html