日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1. 什么是分布式框架

<<分布式原理與范型>>

分布式系統是若干獨立系統的集合,但是用戶使用起來像是在使用一套系統

為什么需要分布式系統?

規模的擴大和業務的復雜,單臺計算機扛不住雙十一那樣的流量,三個臭皮匠抵一個諸葛亮

2. 應用架構的發展演變

1. 單一架構

當網站流量很小的時候,我們將所有的應用(業務)放到一臺服務器上,打包運行

公司管理系統/超市收銀系統

優點:開發簡單,部署簡單

缺點:擴展不容易(怎么處理日益增長的流量),誰都改一個,維護不容易,性能提升難

2. 垂直應用架構

將大應用拆分成為小應用(一般按照業務拆分),根據不同的訪問頻率決定各自業務部署的服務器數量

優點:擴展容易

缺點:頁面一改,可能造成整個項目重新部署,業務和界面沒有分離開,隨著業務種類增加,怎么解決業務之間的互相調用問題,訂單服務器和用戶服務器交互效率的問題

3. 分布式架構(基于RPC:遠程過程調用)

將業務拆分后,用某種方式實現各個業務模塊的遠程調用和復用,這時一個好的RPC框架就決定了你的分布式架構的性能,怎么調用,何時調用,服務器掛了怎么辦......我們需要一個框架來幫我們解決這個問題(當然大大神可以自己寫一個,但是應對大流量的集大成者莫過于中國的阿里巴巴公司,頂住了淘寶雙十一的流量,反觀12306和研招網,甚至一些學校內部的選課系統,對于大流量時只有兩個字--宕機)

這時,我們本套課程的主人公就出現了(Dubbo),Dubbo是一個高性能的RPC框架,解決了分布式中的調用問題

優點:解決了分布式系統中互相調用的問題

缺點:假設有100臺服務器,50臺用戶業務服務器,50臺訂單業務服務器,但是在上線后發現用戶服務器使用率很小,但是訂單服務器壓力很大,最佳配比應該是1:4,這時候就要求我們還有一個統一管理的調度中心

4.流動計算架構

基于第3點中提到的資源浪費問題,我們需要一個能夠實時根據調度情況來分配算力的架構,這就是流動計算架構

5. 微服務解決什么問題

微服務要解決什么問題 (高可用>一直可以用[創建副本],高并發,高性能)

造成一切的原因:網絡是不可靠的

客戶端如何訪問這么多的服務?

用戶不可能要用什么服務就訪問該服務地址,這樣做是低效的,我們應該給用戶提供一個統一入口

服務聚合,API網關

服務與服務之間怎么通信

同步通信

– HTTP(Apache Http Client)

– RPC(Dubbo 只支持JAVA,別的有Apache Thrift,gRPC)

異步通信

– 消息隊列 kafka RabbitMQ RocketMQ

這么多服務如何管理?

服務治理>服務的注冊與發現

– 基于客戶端的服務注冊與發現

Apache Zookeeper

– 基于服務端的服務注冊與發現

NetFlix Eureka

服務掛了(宕機)怎么辦

– 重試機制

– 服務熔斷

– 服務降級

– 服務限流

3.一些問題

1. 什么是SOA

以下內容摘自百度百科

面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)進行拆分,并通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。

 

SOA類似于OOP,只是一種思想,既然是思想,那么就有落地的實現,Dubbo就是其中的一個

2. SOA和微服務區別

其實沒有很大的區別,微服務也是一種思想,是SOA的延伸和升華,在本質上并沒有什么大的區別

微服務是在SOA基礎上加上了組件化的思想,微服務架構強調的一個重點是“業務需要徹底的組件化和服務化”,原有的單個業務系統會拆分為多個可以獨立開發、設計、運行的小應用。這些小應用之間通過服務完成交互和集成。

3. SpringCloud 和 Dubbo區別和對比

如果一個人問"SpringCloud 和 Dubbo"哪個好,說明這個人一定是個小白

首先SpringCloud是為了解決在分布式開發中可能遇到的一攬子問題

而Dubbo是一個RPC框架,只解決遠程調用的問題

他們沒有好不好的問題,記住一句話 技術沒有好壞,只有適合不適合

甚至本文中學習的一些技術,在我們未來開發中會發現使用了這個技術反而讓開發維護變得復雜,但是性能沒有什么大的提升

這是因為我之前所說的:技術沒有好壞,只有適合不適合

而怎么去選擇一個合適的技術棧是一個架構師需要去權衡的問題

Oracle和MySQL哪個好?類似這樣的問題是沒有答案的,這個取決于你的團隊對該數據庫語言的熟悉程度,以及應用的具體場景,還有預算[手動滑稽臉].我不會告訴你FaceBook現在還在用Mysql+Tomcat

SpringCloud 調用是HTTP方式,而Dubbo是基于RPC協議(本質上就是建立了一個Socket連接,Java基礎就有講,感興趣可以百度)

4. 再談RPC

RPC是一種技術思想,而不是具體的落地實現,它的落地實現有很多,但是其中用的最多的就是我們的Dubbo框架.

RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。SAP系統RPC調用的原理其實很簡單,有一些類似于三層構架的C/S系統,第三方的客戶程序通過接口調用SAP內部的標準或自定義函數,獲得函數返回的數據進行處理后顯示或打印。

其實你遠程使用別人家的打印機打印一份資料也算RPC,你媽叫你買菜也算RPC

假設有A,B兩臺服務器,當A想用B上面的一個方法的時候,就會和B建立一個連接,并且告訴B我要調用的方法和參數,這時候B就會將計算好的結果通過連接發給A,結束本次調用(這時候需要思考,每次調用都需要建立連接?這樣效率會不會變低?這就是編程思想)

5. 搞定Dubbo

1.初識Dubbo

1. 為什么Dubbo說自己性能高

高性能要從底層的原理說起,既然是一個RPC框架,主要干的就是遠程過程(方法)調用

提升性能就要從最關鍵,最耗時的兩個方面入手

序列化

網絡通信

序列化

而我們學習Java網絡開發的時候知道,本地的對象要在網絡上傳輸,必須要實現Serializable接口,也就是必須序列化

我們序列化的方案很多

xml

json

二進制流

其中效率最高的就是二進制流(因為計算機就是二進制的)

Dubbo采用的就是效率最高的二進制

網絡通信

不同于HTTP需要進行7步走(三次握手和四次揮手),Dubbo采用Socket通信機制,一步到位,提升了通信效率,并且可以建立長連接,不用反復連接,直接傳輸數據

2. 別的RPC框架

gRPC

Thrift

HSF

...

3. dubbo的前世今生

dubbo之前一直都作為Alibaba公司內部使用的框架

2011年,dubbo被托管到了GitHub上(開源)

2014年11月發布2.4.11版本后宣布停止更新

此后一段時間很多公司開源了自己基于Dubbo的變種版本(例如當當網的Dubbo X,網易考拉的Dubbo K)

2017年SpringCloud橫空出世,Dubbo感覺到壓力后連續更新了幾個版本

2018年1月,阿里公司聯合當當網將Dubbo和Dubbo X合并,發布了2.6版本

2018年除夕夜阿里將Dubbo貢獻給了Apache基金會

2018除夕夜至今,Apache維護和更新Dubbo

4. Dubbo強大在哪兒

https://dubbo.apache.org/zh-cn/

以下內容摘自官網

面向接口代理的高性能RPC調用

提供高性能的基于代理的遠程調用能力,服務以接口為粒度,為開發者屏蔽遠程調用底層細節。

智能負載均衡

內置多種負載均衡策略,智能感知下游節點健康狀況,顯著減少調用延遲,提高系統吞吐量。

服務自動注冊與發現

支持多種注冊中心服務,服務實例上下線實時感知。

高度可擴展能力

遵循微內核+插件的設計原則,所有核心能力如Protocol、Transport、Serialization被設計為擴展點,平等對待內置實現和第三方實現。

運行期流量調度

內置條件、腳本等路由策略,通過配置不同的路由規則,輕松實現灰度發布,同機房優先等功能。

可視化的服務治理與運維

提供豐富服務治理、運維工具:隨時查詢服務元數據、服務健康狀態及調用統計,實時下發路由策略、調整配置參數。

他都吹完了,我就不商業互吹了

但是dubbo并不是一套微服務框架,但是它勵志成為微服務的一站式解決方案(不同于別的框架只做RPC)

5. 什么是注冊中心

假如我們有100臺A服務器和100臺B服務器,其中一臺A想要調用B,這時候A怎么知道要調用哪一臺B(總不可能每臺A上都存儲所有B的信息吧?)

這時候,我們就需要類似于婚介所的角色,這個地方存儲了所有的信息(包含A和B),小伙找小姑娘可以隨時問婚介所,反之亦然

實際注冊中心就能根據負載策略來分配調用哪一臺服務器

6. 什么是運行期流量調度(灰度發布)

在新版本(一般是內測版或者公測版上線后),我們可以先讓其中的20臺服務器先用新的服務,確認無誤后再讓剩下的80臺服務器使用新的服務,保證出現bug的時候損失最小(facebook經常這樣來發布新應用)

7. 服務提供者/消費者

遠程調用過程必然有服務提供者和消費者,比如訂單服務器提供訂單服務,用戶服務器使用訂單服務,其中訂單服務器是提供者,用戶服務器是消費者.反之亦然.

所以在RPC中沒有絕對的消費者和提供者,任何服務都能同時兼備消費者和提供者兩個身份,并且絕大多數時候如此

8. 通信模型

通信模型都有什么?

BIO 同步阻塞

NIO 同步非阻塞(Dubbo使用的Netty框架就是使用的這一種通信方式,而Netty 作為一款高性能的通信框架,廣泛應用于游戲服務器和物聯網服務器)

AIO 異步非阻塞

9.組件角色

Dubbo中的5大組件(角色)

Provider 提供者

Consumer 消費者

Registry 服務發現與注冊中心

Monitor 監控中心

Container 服務運行容器

2. Dubbo 環境搭建

1. 注冊中心種類

Dubbo支持的注冊中心有很多

Simple

redis

Nacos

Multicast

Zookeeper

其中Dubbo官方推薦使用 Zookeeper作為注冊中心

2. 注冊中心搭建

  • 1. linux(生產環境)下的搭建[教學中跳過]

參考dubbo.docx里關于Linux下搭建(不是最好的搭建方式,建議使用Docker)

  • 2. windows(開發環境)下的搭建

Windows下的安裝包解壓(我已經解壓并放在了E:zookeeper-3.4.11)

進入bin目錄

運行zkServer.cmd

到這里我們的Zookeeper服務就啟動了

啟動bin目錄下的zkCli.cmd

運行命令

獲取根目錄下的數據

get /

獲取所有節點(我獲取到了兩個節點)

ls /

創建節點

create -e /shouwang 123456

ls /

到這里就搭建完成了,但是Zookeeper的功能遠不止于此

我們只是用它作為注冊中心

  • 3. Zookeeper的文件結構

Zookeeper 是 Apacahe Hadoop 的子項目,是一個樹型的目錄服務,支持變更推送,適合作為 Dubbo 服務的注冊中心,工業強度較高,可用于生產環境,并推薦使用

  • 4. 控制臺dubbo-admin(非必須)

控制臺為我們提供了可視化界面來監控我們的服務運行情況,但是這個在實際生產環境中不一定能使用到,這里我們搭建的目的是為了在開發和學習環境中能更好的監控我們的服務

你可以在GitHub上搜索Dubbo-ops

也可以使用我已經下載好的監控中心

我的已經解壓到(E:/incubator-dubbo-ops-master)

進入dubbo-admin目錄,會發現一個maven工程pom

  • 以下是pom.xml里的內容

<?xmlversion="1.0" encoding="UTF-8"?>

<projectxmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.alibaba</groupId>

<artifactId>dubbo-admin</artifactId>

<version>0.0.1-SNAPSHOT</version>

<packaging>jar</packaging>

<name>dubbo-admin</name>

<description>Demo project for Spring Boot</description>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.0.2.RELEASE</version>

<relativePath/><!-- lookup parent from repository -->

</parent>

<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.alibaba.boot</groupId>

<artifactId>velocity-spring-boot-starter</artifactId>

<version>0.1.0</version>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.7</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.6.2</version>

</dependency>

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-framework</artifactId>

<version>2.12.0</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.46</version>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

</plugins>

</build>

</project>

在2.6之前監控中心都是以war包的形式部署(沒錯,它是作為一個單獨項目存在的)

在2.6之后都是jar包的形式部署(自帶tomcat)

我們開始打包項目

如果沒有配置maven環境變量請參考這篇教程

http://www.cnntt.com/archives/780

cmd進入dubbo-admin目錄

首先清空下包

mvn clean package

等待...然后會出現以下提示

BUILD SUCCESS

進入target文件夾,找到我們已經打好的jar包

(關于mvn是怎么打包的可以自己百度,package命令同樣可以打包,IDEA同樣也可以打包,類似于npm它會根據pom來打包)

得到dubbo-admin-0.0.1-SNAPSHOT.jar(以后可以跳過以上步驟直接使用我打好的jar包)

運行jar

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

如果報錯是因為我們的電腦還沒有啟動zkServer

我們得到以下提示

Tomcat started on port(s): 7001

我們訪問7001即可進入管理控制臺

帳號密碼都為root

這樣我們的環境就搭建完成了

3. 創建提供者和消費者工程

場景假設:

現在我們有兩個服務器

訂單服務器(獨立數據庫)

用戶服務器(獨立數據庫)

現在訂單服務器要創建一個訂單,這時候需要向用戶服務器索要用戶信息(用戶姓名,收貨地址等)

在本例中,用戶服務器是提供者,訂單服務器是消費者

  • 1. 創建提供者工程

首先打開IDEA,然后創建一個空項目(單項目多module的模式,便于開發)

然后在空項目里面創建user-service module

創建方式同SpringBoot

創建時勾選所有DevTools

為了簡化開發,我們的User實體類設計如下

@Data

publicclassUser {

privateInteger id;

privateString name;

privateString addr;

}

設計一個Service接口,用于返回用戶信息

publicinterfaceUserService {

/*根據id查詢用戶信息*/

publicUser getUser(Integer id);

}

實現接口,這里沒有連接數據庫,我們直接構建一個User

publicclassUserServiceImpl implements UserService {

@Override

publicUser getUser(Integer id) {

User user = new User();

user.setId(1);

user.setName("老覃");

user.setAddr("大連");

returnuser;

}

}

  • 2. 創建消費者工程

創建方式同上

新建一個創建訂單服務(只有一個userId參數)

publicinterfaceOrderService {

/*創建訂單*/

publicvoid createOrder(Integer userId);

}

實現方法

publicclassOrderServiceImpl implements OrderService {

@Override

publicvoid createOrder(Integer userId) {

/*查詢用戶信息*/

}

}

到這里我們就需要進行遠程調用了,怎么遠程調用?不可能把接口和實現全部拷貝過來,這個就不叫遠程調用了,這個叫拷貝代碼

所以我們只用把接口拷貝過來,告訴我們有這個方法,具體實現的細節被屏蔽,這個才是分布式開發

  • 3. 改造工程以實現遠程調用

首先我們要把pojo和接口(不包含實現類)拷貝到我們的Order項目中

接下來改造我們上面的訂單實現方法

publicclassOrderServiceImpl implements OrderService {

UserService userService;

@Override

publicvoid createOrder(Integer userId) {

/*查詢用戶信息*/

Logger logger = LoggerFactory.getLogger(getClass());

logger.info(userService.getUser(1)+"");

}

}

本次調用必然是失敗的

原因有二

方法的實現不在我們的項目中(Order)

即使成功,難道每個調用他的項目都需要拷貝接口和pojo嗎

對于以上兩個問題,有對應的兩個解決方案

RPC(不然講Dubbo干啥,它就是干這個的)

創建一個工程來統一管理接口和pojo,參考dubbo官網最佳實踐

摘取dubbo官方一小部分原文

建議將服務接口、服務模型、服務異常等均放在 API 包中,因為服務模型和異常也是 API 的一部分,這樣做也符合分包原則:重用發布等價原則(REP),共同重用原則(CRP)。

接下來我們按照官方建議來解決第一個問題

創建新模塊: api-manager,用于統一管理我們的服務接口、服務模型、服務異常

將pojo和Service復制到我們的新項目中

其他工程里的pojo和Service接口我們都干掉

這時候項目必然報錯,但是我們至少解決了第一個問題

怎么能把我們上面的項目里的pojo和接口引入呢?

這時候就要用到我們的Maven了(其實拷貝jar包也可以,但是太low了)

在提供者和消費者項目的pom中引入我們的api-manager

<dependency>

<groupId>com.shouwang</groupId>

<artifactId>api-manager</artifactId>

<version>0.0.1-SNAPSHOT</version>

</dependency>

這樣報錯就消失了

接下來就可以開始著手解決第二個問題了

用Dubbo改造我們的項目分為以下幾個步驟

將服務提供者注冊到注冊中心

服務消費者去注冊中心訂閱服務提供者的IP地址

以下依賴需要同時在消費者和提供者里引入

導入dubbo依賴(建議使用2.6.x,因為2.6是個分水嶺)

<!-- dubbo -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>dubbo</artifactId>

<version>2.6.2</version>

</dependency>

導入Zookeeper客戶端(2.6以后不是zkclinet而是curator)

<!-- curator-framework -->

<dependency>

<groupId>org.apache.curator</groupId>

<artifactId>curator-framework</artifactId>

<version>2.12.0</version>

</dependency>

配置dubbo(dubbo官方為我們提供了xml配置方式)

詳情參照https://dubbo.apache.org/zh-cn/docs/user/quick-start.html

服務提供者provider.xml(放在resources下)

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

<!-- 提供方應用信息,用于計算依賴關系(同樣的服務名字一定要一致,不同服務名字不能相同) -->

<dubbo:Applicationname="user-service"/>

<!-- 使用multicast廣播注冊中心暴露服務地址 -->

<dubbo:registryaddress="zookeeper://127.0.0.1:2181"/>

<!-- 用dubbo協議在20880端口暴露服務 -->

<dubbo:protocolname="dubbo" port="20880"/>

<!-- 聲明需要暴露的服務接口 ref指向服務實現-->

<dubbo:serviceinterface="com.shouwang.apimanager.service.UserService" ref="userService"/>

<!-- 和本地bean一樣實現服務 -->

<beanid="userService" class="com.shouwang.userservice.serviceImpl.UserServiceImpl"/>

</beans>

接下來按照官方給出的寫一個main方法去讀取我們的配置文件

publicclassProvider {

publicstatic void main(String[] args) throws Exception {

ClassPathXmlApplicationContext context = newClassPathXmlApplicationContext("provider.xml");

context.start();

System.in.read(); // 按任意鍵退出,防止應用終止

}

}

啟動應用(可能需要修復一下我們之前的導包問題)

進入我們dubbo-admin項目,可以看到提供者多出一個

接下來我們來配置消費者consumer.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

<!-- 消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 -->

<dubbo:applicationname="order-service" />

<!-- 使用multicast廣播注冊中心暴露發現服務地址 -->

<dubbo:registryaddress="zookeeper://127.0.0.1:2181" />

<!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->

<dubbo:referenceid="userService" interface="com.shouwang.apimanager.service.UserService" />

</beans>

因為我們配置了一個bean,所以我們就可以使用依賴注入,將服務代理注進來,修改之前的消費者實現

//注意,這里還是使用的Spring中的Service(Dubbo后面會講)

@Service

publicclassOrderServiceImpl implements OrderService {

@Autowired

UserService userService;

@Override

publicvoid createOrder(Integer userId) {

/*查詢用戶信息*/

Logger logger = LoggerFactory.getLogger(getClass());

logger.info(userService.getUser(1)+"");

}

}

因為我們使用了Spring注解,所以我們需要加入包掃描來發現我們的注解

修改consumer.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!-- 消費方應用名,用于計算依賴關系,不是匹配條件,不要與提供方一樣 -->

<dubbo:applicationname="order-service" />

<!-- 使用multicast廣播注冊中心暴露發現服務地址 -->

<dubbo:registryaddress="zookeeper://127.0.0.1:2181" />

<!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->

<dubbo:referenceid="userService" interface="com.shouwang.apimanager.service.UserService" />

<!--配置包掃描-->

<context:component-scanbase-package="com.shouwang.orderservice.serviceImpl"></context:component-scan>

</beans>

創建Consumer類

publicclassConsumer {

publicstatic void main(String[] args) throws Exception {

ClassPathXmlApplicationContext context = newClassPathXmlApplicationContext("consumer.xml");

context.start();

OrderService orderService = (OrderService)context.getBean(OrderService.class);// 獲取遠程服務代理

orderService.createOrder(1); // 執行遠程方法

System.in.read();//防止退出

}

}

這里會報錯,因為我們的User是要在網絡上傳輸的,所以必須實現Serializable接口

修改后的User

@Data

publicclassUser implements Serializable {

privateInteger id;

privateString name;

privateString addr;

}

再次運行,成功完成一次RPC

同樣進入dubbo-admin,得到以下結果

服務數:1 應用數:2 提供者數:1 消費者數:1

4. 簡單的監控中心simple-monitor

我的監控中心已經解壓到E:dubbo-monitor-simple-2.0.0下

同樣你可以在dubbo github主頁上獲取最新版本

打包方式和控制臺相似

嫌打包麻煩也可以直接在assembly.bin文件夾里通過start.sh啟動

啟動后訪問http://localhost:8080即可

然后在我們提供者和消費者xml配置中新增

<!--監控中心-->

<dubbo:monitorprotocol="registry"></dubbo:monitor>

開發環境下用我配置好的即可,但是生產環境下記得將conf目錄下Zookeeper的路徑以及端口配置好

這里不再贅述,更多詳細說明可以參照官網https://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-monitor.html

控制臺和監控中心類似,2選1甚至不選都是可以的

5. Dubbo與SpringBoot整合

  • 1. 準備工作

SpringBoot倡導0配置開發,所以我們實際開發中Dubbo肯定為我們提供了Annotation(注解式開發),來簡化我們的開發過程

為了讓我寫的教程成為參考手冊(減少各個章節之間的關聯,成為松耦合的教程),我們重新創建模塊并進行開發

以下是新的假設場景

開發一個云筆記項目(類似于有道云筆記)

為了簡化我們的教程,我們只編寫以下兩個服務

筆記服務

用戶服務

創建筆記的時候我們需要消費用戶服務以得到創建者的信息

新建兩個模塊(加springboot前綴是為了區分之前的xml配置項目,實際生產環境下名字自取)

在自定義目錄下創建一個空文件夾

創建完成后用IDEA打開指定項目

在文件夾中創建一個Maven項目(這是api服務)

springboot-user-api

創建結束后需要對pom文件進行改造,具體改造參照源碼

<?xmlversion="1.0" encoding="UTF-8"?>

<projectxmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>com.zfbgt</groupId>

<artifactId>springboot-user-api</artifactId>

<version>1.0.0-SNAPSHOT</version>

<!--指定打包方式-->

<packaging>jar</packaging>

<properties>

<!--指定編碼集-->

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<!--指定java版本-->

<java.version>1.8</java.version>

</properties>

</project>

在源碼包下新建包(遵循包命名規范):com.zfbgt.hello.dubbo.service.user.api

然后在該包下創建UserService接口

packagecom.zfbgt.hello.dubbo.service.user.api;

publicinterfaceUserService {

String sayHi();

}

定義好接口后我們創建第二個項目[Spring Initializer]

創建好了后參照官網給出的sample修改我們的pom文件

在引入API項目的時候可能會找不到,原因是因為我們沒有安裝該項目,使用mvn clean install 命令即可安裝我們的項目

springboot-user-service

springboot-note-service

創建過程不再贅述

  • 2. 測試運行
  • 3. IDEA一些問題

當我們刪除了一個module并重新創建的時候,我們會發現再次打開項目會提示"These modules have been removed from Maven structure:

'springboot-user-api'"

這時File-Settings-Maven-lgnored Files

把打勾的pom.xml去掉就可以了

分享到:
標簽:框架 Dubbo
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定