一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Springboot 整合 Dubbo/ZooKeeper 實現 SOA 案例解析

Springboot 整合 Dubbo/ZooKeeper 實現 SOA 案例解析

2021-02-05 12:25roncoo Java教程

這篇文章主要介紹了Springboot 整合 Dubbo/ZooKeeper 詳解 SOA 案例,需要的朋友可以參考下

一、為啥整合 Dubbo 實現 SOA

Dubbo 不單單只是高性能的 RPC 調用框架,更是 SOA 服務治理的一種方案。

核心:

遠程通信,向本地調用一樣調用遠程方法。

集群容錯

服務自動發現和注冊,可平滑添加或者刪除服務提供者。

我們常常使用 Springboot 暴露 HTTP 服務,并走 JSON 模式。但慢慢量大了,一種 SOA 的治理方案。這樣可以暴露出 Dubbo 服務接口,提供給 Dubbo 消費者進行 RPC 調用。下面我們詳解下如何集成 Dubbo。

二、運行 springboot-dubbo-server 和 springboot-dubbo-client 工程

運行環境:JDK 7 或 8,Maven 3.0+

技術棧:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

1.ZooKeeper 服務注冊中心

ZooKeeper 是一個分布式的,開放源碼的分布式應用程序協調服務。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

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

解壓 ZooKeeper

?
1
tar zxvf zookeeper-3.4.8.tar.gz

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

?
1
2
cd zookeeper-3.3.6/conf
vim zoo.cfg

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

?
1
2
3
4
tickTime=2000
dataDir=/javaee/zookeeper/data
dataLogDir=/javaee/zookeeper/log
clientPort=2181

在 bin 目錄下,啟動 ZooKeeper:

?
1
2
cd zookeeper-3.3.6/bin
./zkServer.sh start

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

項目地址見 GitHub - https://github.com/JeffLi1993/springboot-learning-example

git clone [email protected]:JeffLi1993/springboot-learning-example.git

然后,Maven 編譯安裝這個工程:

?
1
2
cd springboot-learning-example
mvn clean install

3.運行 springboot-dubbo-server Dubbo 服務提供者工程

右鍵運行 springboot-dubbo-server 工程 ServerApplication 應用啟動類的 main 函數。Console 中出現如下表示項目啟動成功。這里表示 Dubbo 服務已經啟動成功,并注冊到 ZK (ZooKeeper)中。

4.運行 springboot-dubbo-client Dubbo 服務消費者工程

右鍵運行 springboot-dubbo-client 工程 ClientApplication 應用啟動類的 main 函數。Console 中出現如下:

?
1
2
3
4
5
...
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='是我的故鄉'}

最后打印的城市信息,就是通過 Dubbo 服務接口調用獲取的。順利運行成功,下面詳解下各個代碼及配置。

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

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

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

springboot-dubbo-server 工程目錄結構

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
├── 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 工程,該項目地址是 https://github.com/teaey/spring-boot-starter-dubbo

pom.xml 配置如下

?
1
2
3
4
5
6
4.0.0  springboot  springboot-dubbo-server  0.0.1-SNAPSHOT  springboot-dubbo 服務端:: 整合 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 配置

?
1
2
3
4
5
6
## Dubbo 服務提供者配置
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 配置的地址和端口,就是上面本機搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解釋如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
spring.dubbo.application.name 應用名稱
spring.dubbo.registry.address 注冊中心地址
spring.dubbo.protocol.name 協議名稱
spring.dubbo.protocol.port 協議端口
spring.dubbo.scan dubbo 服務類包目錄
c.CityDubboServiceImpl.java 城市業務 Dubbo 服務層實現層類
// 注冊為 Dubbo 服務
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {
  public City findCityByName(String cityName) {
    return new City(1L,2L,"溫嶺","是我的故鄉");
  }
}
@Service 注解標識為 Dubbo 服務,并通過 version 指定了版本號。

d.City.java 城市實體類

實體類通過 Dubbo 服務之間 RPC 調用,則需要實現序列化接口。最好指定下 serialVersionUID 值。

2.詳解 springboot-dubbo-client Dubbo 服務消費者工程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
springboot-dubbo-client 工程目錄結構
├── 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 沒有改動。Dubbo 消費者通過引入接口實現 Dubbo 接口的調用。

a.application.properties 配置

?
1
2
3
4
5
6
## 避免和 server 工程端口沖突
server.port=8081
## Dubbo 服務消費者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo

因為 springboot-dubbo-server 工程啟動占用了 8080 端口,所以這邊設置端口為 8081。

b.CityDubboConsumerService.java 城市 Dubbo 服務消費者

?
1
2
3
4
5
6
7
8
9
10
@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”) 通過該注解,訂閱該接口版本為 1.0.0 的 Dubbo 服務。

這里將 CityDubboConsumerService 注入 Spring 容器,是為了更方便的獲取該 Bean,然后驗證這個 Dubbo 調用是否成功。

c.ClientApplication.java 客戶端啟動類

?
1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
public class ClientApplication {
  public static void main(String[] args) {
    // 程序啟動入口
    // 啟動嵌入式的 Tomcat 并初始化 Spring 環境及其各 Spring 組件
    ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
    CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
    cityService.printCity();
  }
}

解釋下這段邏輯,就是啟動后從 Bean 容器中獲取城市 Dubbo 服務消費者 Bean。然后調用該 Bean 方法去驗證 Dubbo 調用是否成功。

四、小結

還有涉及到服務的監控,治理。這本質上和 SpringBoot 無關,這邊不做一一介紹。

總結

以上所述是小編給大家介紹的Springboot 整合 Dubbo/ZooKeeper 實現 SOA 案例解析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.roncoo.com/article/detail/130942

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 催奶师小说 | 国产在线步兵一区二区三区 | 脱女学小内内摸出水网站免费 | 久久亚洲精品专区蓝色区 | 欧美日本一本线在线观看 | 免费国产白棉袜踩踏区域 | 91欧美国产 | 91看片淫黄大片在看 | 色橹| 国产精品毛片高清在线完整版 | 美女扒开胸罩露出奶 | 日本不卡1卡2卡三卡网站二百 | evelynlin亚裔播放| 果冻传媒在线视频观看免费 | 成人国产精品一级毛片视频 | 亚洲 欧美 日韩 国产 视频 | 日本护士撒尿xxxx欧美 | 99久久精品无码一区二区毛片 | 欧美亚洲国产另类在线观看 | 福利姬 magnet | 色播导航| yellow高清免费观看日本 | 999资源站 | 好湿好紧太硬了我太爽了h 好湿好滑好硬好爽好深视频 | 亚洲精品国产精品麻豆99 | 亚洲日本在线观看网址 | 亚洲精品动漫在线观看 | 国产女主播福利在线 | 国内免费高清视频在线观看 | 亚洲第一网站免费视频 | 视频在线观看入口一二三2021 | 亚洲精品一区二区三区在线观看 | 全彩调教侵犯h本子全彩妖气he | 国产精品原创巨作无遮挡 | 欧美日韩不卡视频 | 变态np虐高h | 青青草影院在线观看 | 国产亚洲综合精品一区二区三区 | 色妞女女女女女bbbb | 亚洲欧美日韩成人 | 91在线一区二区三区 |