欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot 整合 Dubbo/ZooKeeper 實(shí)現(xiàn) SOA 案例解析

 更新時(shí)間:2017年11月16日 09:56:57   投稿:mrr  
這篇文章主要介紹了Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例,需要的朋友可以參考下

一、為啥整合 Dubbo 實(shí)現(xiàn) SOA

Dubbo 不單單只是高性能的 RPC 調(diào)用框架,更是 SOA 服務(wù)治理的一種方案。

核心:

遠(yuǎn)程通信,向本地調(diào)用一樣調(diào)用遠(yuǎn)程方法。

集群容錯(cuò)

服務(wù)自動(dòng)發(fā)現(xiàn)和注冊(cè),可平滑添加或者刪除服務(wù)提供者。

我們常常使用 Springboot 暴露 HTTP 服務(wù),并走 JSON 模式。但慢慢量大了,一種 SOA 的治理方案。這樣可以暴露出 Dubbo 服務(wù)接口,提供給 Dubbo 消費(fèi)者進(jìn)行 RPC 調(diào)用。下面我們?cè)斀庀氯绾渭?Dubbo。

二、運(yùn)行 springboot-dubbo-server 和 springboot-dubbo-client 工程

運(yùn)行環(huán)境:JDK 7 或 8,Maven 3.0+

技術(shù)棧:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

1.ZooKeeper 服務(wù)注冊(cè)中心

ZooKeeper 是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。

下載 ZooKeeper ,地址 http://www.apache.org/dyn/closer.cgi/zookeeper

解壓 ZooKeeper

tar zxvf zookeeper-3.4.8.tar.gz

在 conf 目錄新建 zoo.cfg ,照著該目錄的 zoo_sample.cfg 配置如下。

cd zookeeper-3.3.6/conf
vim zoo.cfg

zoo.cfg 代碼如下(自己指定 log 文件目錄):

tickTime=2000
dataDir=/javaee/zookeeper/data 
dataLogDir=/javaee/zookeeper/log
clientPort=2181

在 bin 目錄下,啟動(dòng) ZooKeeper:

cd zookeeper-3.3.6/bin
./zkServer.sh start

2. git clone 下載工程 springboot-learning-example

項(xiàng)目地址見 GitHub - https://github.com/JeffLi1993/springboot-learning-example

git clone git@github.com:JeffLi1993/springboot-learning-example.git

然后,Maven 編譯安裝這個(gè)工程:

cd springboot-learning-example
mvn clean install

3.運(yùn)行 springboot-dubbo-server Dubbo 服務(wù)提供者工程

右鍵運(yùn)行 springboot-dubbo-server 工程 ServerApplication 應(yīng)用啟動(dòng)類的 main 函數(shù)。Console 中出現(xiàn)如下表示項(xiàng)目啟動(dòng)成功。這里表示 Dubbo 服務(wù)已經(jīng)啟動(dòng)成功,并注冊(cè)到 ZK (ZooKeeper)中。

4.運(yùn)行 springboot-dubbo-client Dubbo 服務(wù)消費(fèi)者工程

右鍵運(yùn)行 springboot-dubbo-client 工程 ClientApplication 應(yīng)用啟動(dòng)類的 main 函數(shù)。Console 中出現(xiàn)如下:

...
2017-03-01 16:31:38.473 INFO 9896 --- [      main] o.s.j.e.a.AnnotationMBeanExporter    : Registering beans for JMX exposure on startup
2017-03-01 16:31:38.538 INFO 9896 --- [      main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-03-01 16:31:38.547 INFO 9896 --- [      main] org.spring.springboot.ClientApplication : Started ClientApplication in 6.055 seconds (JVM running for 7.026)
City{id=1, provinceId=2, cityName='溫嶺', description='是我的故鄉(xiāng)'}

最后打印的城市信息,就是通過(guò) Dubbo 服務(wù)接口調(diào)用獲取的。順利運(yùn)行成功,下面詳解下各個(gè)代碼及配置。

三、springboot-dubbo-server 和 springboot-dubbo-client 工程配置詳解

代碼都在 GitHub 上, https://github.com/JeffLi1993/springboot-learning-example。

1.詳解 springboot-dubbo-server Dubbo 服務(wù)提供者工程

springboot-dubbo-server 工程目錄結(jié)構(gòu)

├── pom.xml
└── src
  └── main
    ├── java
    │  └── org
    │    └── spring
    │      └── springboot
    │        ├── ServerApplication.java
    │        ├── domain
    │        │  └── City.java
    │        └── dubbo
    │          ├── CityDubboService.java
    │          └── impl
    │            └── CityDubboServiceImpl.java
    └── resources
      └── application.properties

a.pom.xml 配置

pom.xml 中依賴了 spring-boot-starter-dubbo 工程,該項(xiàng)目地址是 https://github.com/teaey/spring-boot-starter-dubbo

pom.xml 配置如下

4.0.0  springboot  springboot-dubbo-server  0.0.1-SNAPSHOT  springboot-dubbo 服務(wù)端:: 整合 Dubbo/ZooKeeper 詳解 SOA 案例  
      org.springframework.boot    spring-boot-starter-parent    1.5.1.RELEASE        1.0.0        
          io.dubbo.springboot      spring-boot-starter-dubbo      ${dubbo-spring-boot}        
          org.springframework.boot      spring-boot-starter-web        
          org.springframework.boot      spring-boot-starter-test      test        
          junit      junit      4.12

b.application.properties 配置

## Dubbo 服務(wù)提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=org.spring.springboot.dubbo

這里 ZK 配置的地址和端口,就是上面本機(jī)搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解釋如下:

spring.dubbo.application.name 應(yīng)用名稱
spring.dubbo.registry.address 注冊(cè)中心地址
spring.dubbo.protocol.name 協(xié)議名稱
spring.dubbo.protocol.port 協(xié)議端口
spring.dubbo.scan dubbo 服務(wù)類包目錄
c.CityDubboServiceImpl.java 城市業(yè)務(wù) Dubbo 服務(wù)層實(shí)現(xiàn)層類
// 注冊(cè)為 Dubbo 服務(wù)
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {
  public City findCityByName(String cityName) {
    return new City(1L,2L,"溫嶺","是我的故鄉(xiāng)");
  }
}
@Service 注解標(biāo)識(shí)為 Dubbo 服務(wù),并通過(guò) version 指定了版本號(hào)。

d.City.java 城市實(shí)體類

實(shí)體類通過(guò) Dubbo 服務(wù)之間 RPC 調(diào)用,則需要實(shí)現(xiàn)序列化接口。最好指定下 serialVersionUID 值。

2.詳解 springboot-dubbo-client Dubbo 服務(wù)消費(fèi)者工程

springboot-dubbo-client 工程目錄結(jié)構(gòu)
├── pom.xml
└── src
  └── main
    ├── java
    │  └── org
    │    └── spring
    │      └── springboot
    │        ├── ClientApplication.java
    │        ├── domain
    │        │  └── City.java
    │        └── dubbo
    │          ├── CityDubboConsumerService.java
    │          └── CityDubboService.java
    └── resources
      └── application.properties

pom.xml 、 CityDubboService.java、City.java 沒有改動(dòng)。Dubbo 消費(fèi)者通過(guò)引入接口實(shí)現(xiàn) Dubbo 接口的調(diào)用。

a.application.properties 配置

## 避免和 server 工程端口沖突
server.port=8081
## Dubbo 服務(wù)消費(fèi)者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo

因?yàn)?springboot-dubbo-server 工程啟動(dòng)占用了 8080 端口,所以這邊設(shè)置端口為 8081。

b.CityDubboConsumerService.java 城市 Dubbo 服務(wù)消費(fèi)者

@Component
public class CityDubboConsumerService {
  @Reference(version = "1.0.0")
  CityDubboService cityDubboService;
  public void printCity() {
    String cityName="溫嶺";
    City city = cityDubboService.findCityByName(cityName);
    System.out.println(city.toString());
  }
}

@Reference(version = “1.0.0”) 通過(guò)該注解,訂閱該接口版本為 1.0.0 的 Dubbo 服務(wù)。

這里將 CityDubboConsumerService 注入 Spring 容器,是為了更方便的獲取該 Bean,然后驗(yàn)證這個(gè) Dubbo 調(diào)用是否成功。

c.ClientApplication.java 客戶端啟動(dòng)類

@SpringBootApplication
public class ClientApplication {
  public static void main(String[] args) {
    // 程序啟動(dòng)入口
    // 啟動(dòng)嵌入式的 Tomcat 并初始化 Spring 環(huán)境及其各 Spring 組件
    ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
    CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
    cityService.printCity();
  }
}

解釋下這段邏輯,就是啟動(dòng)后從 Bean 容器中獲取城市 Dubbo 服務(wù)消費(fèi)者 Bean。然后調(diào)用該 Bean 方法去驗(yàn)證 Dubbo 調(diào)用是否成功。

四、小結(jié)

還有涉及到服務(wù)的監(jiān)控,治理。這本質(zhì)上和 SpringBoot 無(wú)關(guān),這邊不做一一介紹。

總結(jié)

以上所述是小編給大家介紹的Springboot 整合 Dubbo/ZooKeeper 實(shí)現(xiàn) SOA 案例解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java的String類中的startsWith方法和endsWith方法示例詳解

    Java的String類中的startsWith方法和endsWith方法示例詳解

    大家應(yīng)該都知道startsWith()方法用于檢測(cè)字符串是否以指定的前綴開始,endsWith()方法用于測(cè)試字符串是否以指定的后綴結(jié)束,本文就Java的String類中的startsWith方法和endsWith方法給大家詳細(xì)講解,感興趣的朋友一起看看吧
    2023-11-11
  • 解決JavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問(wèn)題

    解決JavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問(wèn)題

    下面小編就為大家?guī)?lái)一篇解決JavaEE開發(fā)中字符編碼出現(xiàn)亂碼的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 一文詳解Java方法重載與遞歸應(yīng)用

    一文詳解Java方法重載與遞歸應(yīng)用

    方法重載 允許在同一個(gè)類中定義多個(gè)具有相同名稱的方法,但 參數(shù)列表 必須不同,遞歸 是一種讓函數(shù)調(diào)用自身的技術(shù),它提供了一種將復(fù)雜問(wèn)題分解為簡(jiǎn)單問(wèn)題的方法,這樣更容易解決,本文詳細(xì)介紹了Java方法重載與遞歸應(yīng)用,需要的朋友可以參考下
    2024-02-02
  • Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題示例

    Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的求解經(jīng)典羅馬數(shù)字和阿拉伯?dāng)?shù)字相互轉(zhuǎn)換問(wèn)題,涉及java輸入輸出及字符串、數(shù)組的遍歷與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • SpringBoot的application.yml不生效問(wèn)題及解決

    SpringBoot的application.yml不生效問(wèn)題及解決

    這篇文章主要介紹了SpringBoot的application.yml不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java操作hdfs的方法示例代碼

    java操作hdfs的方法示例代碼

    這篇文章主要介紹了java操作hdfs的相關(guān)資料,在本地配置Hadoop和Maven的環(huán)境變量,首先需從官網(wǎng)下載與服務(wù)器相同版本的Hadoop安裝包,配置環(huán)境變量后,引入Maven的配置文件,以便管理項(xiàng)目依賴,最后,編寫代碼實(shí)現(xiàn)對(duì)HDFS的連接和操作,完成數(shù)據(jù)的讀寫,需要的朋友可以參考下
    2022-02-02
  • Mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法

    Mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法

    MyBatis支持普通sql的查詢、視圖的查詢、存儲(chǔ)過(guò)程調(diào)用,是一種非常優(yōu)秀的持久層框架。接下來(lái)通過(guò)本文給大家介紹mybatis調(diào)用視圖和存儲(chǔ)過(guò)程的方法,感興趣的朋友一起看看吧
    2016-10-10
  • Java構(gòu)造器方法深入理解

    Java構(gòu)造器方法深入理解

    這篇文章主要介紹了Java構(gòu)造器方法深入理解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例

    SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例

    在真實(shí)的Java開發(fā)環(huán)境中,我們經(jīng)常會(huì)需要用到定時(shí)任務(wù)來(lái)幫助我們完成一些特殊的任務(wù),本文主要介紹了SpringBoot定時(shí)任務(wù)多線程實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot項(xiàng)目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    Spring Boot項(xiàng)目添加外部Jar包以及配置多數(shù)據(jù)源的完整步驟

    這篇文章主要給大家介紹了關(guān)于Spring Boot項(xiàng)目添加外部Jar包以及配置多數(shù)據(jù)源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論