日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dubbo入门示例

發布時間:2025/3/21 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dubbo入门示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要介紹阿里dubbo的基本使用,關于dubbo的相關基礎概念請自行參考dubbo官網:http://www.dubbo.io

dubbo是一個服務治理的框架,在如今大規模的分布式應用和SOA架構中,服務治理的問題顯的尤為的重要。

以我個人使用dubbo的場景來總結,dubbo主要解決如下問題:

  1.項目服務化后,項目之間的高性能通訊問題。(項目被拆分成多個服務模塊后必然會涉及模塊之間的通訊)

  2.服務的URL管理,當項目拆分為N個服務并且不斷增加時,如何有效的管理的服務URL

  3.服務發現和服務移除,動態的管理服務

帶著以上三個問題開始dubbo的學習和入門demo的開發。

示例項目分為三個,分別是:

  1. dubbo-api:提供統一的接口,最終會打為jar包,供consumer和provider引用

  2.dubbo-provider:服務提供者,包含api接口的實現類,提供服務的實現邏輯

  3.dubbo-consumer:該項目是一個web項目,有幾個作用,首先該項目以http的形式提供前端和瀏覽器訪問的接口,

    其次,該項目也是dubbo消費者,用來消費dubbo-provider項目提供的服務。所以該項目可以通過瀏覽器調用接口測試,

    也可以使用postman或者前端js來調用進行測試,比較接近真實環境的使用場景。

首先開發dubbo-api:

  項目結構如下圖:

  

  該項目只有一個文件,是一個接口,他定義了統一的接口讓provider和consumer來引用,接口文件內容如下:

  

public interface UserService {String sayHi(String name); }

?

很純粹的一個java接口,不再多解釋什么了。

在該項目的classpath路徑下提供了一個xml配置,該配置文件其實就是dubbo消費者的相關配置,后邊消費者項目引入api之后可以直接使用該文件。

文件內容如下:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 引用服務配置 --><dubbo:reference id="userService" interface="com.dubbo.api.UserService" cluster="failfast" check="false"/> </beans>

?

拋開xml頭文件,該文件的內容也只有一行而已,通過<dubbo:reference>標簽來引用服務配置。

其次是該項目的pom文件:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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.demo.dubbo</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.5.RELEASE</version><scope>provided</scope></dependency></dependencies></project>

?

pom文件中在引入dubbo包時,排除掉了dubbo自帶的spring引用,因為dubbo自帶的spring依賴版本過低,我們使用自己導入的spring版本

到此位置dubbo-api項目已開發完成。

通過maven將其打成jar包,一會consumer和provider需要引入該包。

?

接著我們開發dubbo-provider,項目結構如下:

  

該項目只有兩個類,一個是服務實現類UserServiceImpl,代碼如下:

public class UserServiceImpl implements UserService {public String sayHi(String s) {return "hello " + s + "!";} }

另外一個Main文件是啟動dubbo服務的,內容如下:

public class Main {public static void main(String[] args) {com.alibaba.dubbo.container.Main.main(args);} }

該類是dubbo框架提供,作用是啟動dubbo服務,dubbo會在啟動服務時,讀取classpath下一個名為dubbo.properties文件的屬性值。

并指定了屬性key,只要按照dubbo的規則配置相關參數即可。有興趣的可以去查看下dubbo的源碼。

dubbo.properties文件配置如下:

dubbo.container=spring #set dubbo Sping load setting xmls dubbo.spring.config=classpath:dubbo-provider.xml dubbo.protocol.name=dubbo dubbo.protocol.port=28511

dubbo.container指定了dubbo的容器使用spring,dubbo內部有四種容器實現,SpringContainer是其中一種,也是默認的容器

dubbo.spring.config指定了dubbo在啟動服務時加載的spring配置文件。

dubbo.protocol.name和dubbo.protocol.port分別指定使用的協議名和端口

貼一下dubbo的源碼,SpringContainer類中定義了兩個常量,SPRING_CONFIG和DEFAULT_SPRING_CONFIG,

大概讀一下代碼就可以知道,start方法在執行時,會讀取dubbo.spring.config屬性值,該值指定的就是spring的配置文件,如果沒讀到,則使用默認的配置

默認配置為classpath下META-INF/spring/*.xml,意思是讀取classpath下META-INF文件夾下的spring文件夾中的所有xml文件。

所以我們也可以不配置dubbo.spring.config,但是要遵循dubbo默認的讀取路徑,將spring配置文件放置在META-INF/spring文件夾下。

?

接下來看dubbo-provider.xml中的內容:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><dubbo:application name="dubbo-provider"/><dubbo:registry address="zookeeper://127.0.0.1:2181"/><dubbo:provider cluster="failfast"/><bean id="userService" class="com.dubbo.provider.UserServiceImpl"/><dubbo:service interface="com.dubbo.api.UserService" ref="userService"/> </beans>

該文件其實就是一個spring配置文件,只不過引入了dubbo相關的配置。

<dubbo:application>指定了程序名稱,我們可以在dubbo管理后臺中通過該名稱更清晰的區分服務

<dubbo:registry>指定了注冊中心的地址

<dubbo:provider>指定了集群容錯模式,此處為快速失敗

<bean> 普通的spring依賴注入

<dubbo:service>服務導出,引用<bean>標簽注入的類

最后來看下provider項目的pom文件:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="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.yinyuetai.dubbo</groupId><artifactId>dubbo-provider</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>com.demo.dubbo</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies></project>

此處引入了zk相關的包,因為服務提供者在啟動時會向注冊中心注冊服務。

此處的provider引入了dubbo-api的jar包。

到此位置,provider項目的開發已經完成。

?

最后來看dubbo-consumer這個web項目,相對來說也是三個項目中最為負責的一個。

項目結構:

UserController類就是個控制器,使用requestMapping注解提供http接口服務,內容如下:

@RestController public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/hello.html")@ResponseBodypublic String sayHello(String name) {String welcome = userService.sayHi(name);return welcome;} }

接下來看配置文件,首先看web.xml:

<?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- 配置Spring配置文件路徑 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-config.xml</param-value></context-param><!-- 配置Spring上下文監聽器 --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping></web-app>

<context-param>配置了spring配置文件的位置

下邊servlet中配置spring-mvc配置文件的位置,都是spring開發的基本配置。不多解釋了

spring-config.xml文件內容:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"default-autowire="byName"><!-- 開啟注解配置 --><context:annotation-config/><import resource="classpath:dubbo-consumer.xml"/></beans>

開啟了注解支持,并且通過import導入了另一份配置文件

dubbo-consumer.xml內容:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><dubbo:application name="dubbo-consumer"/><dubbo:registry address="zookeeper://127.0.0.1:2181"/><dubbo:consumer check="false"/><!-- 導入dubbo配置 --><import resource="classpath*:user-reference.xml"/> </beans>

該配置指定了應用程序的名稱,注冊中心地址,以及dubbo-api項目中定義的dubbo配置文件。

spring-mvc.xml內容:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置自動掃描的包路徑 --><context:component-scan base-package="com.dubbo.consumer.web"/> </beans>

僅僅定義了自動掃描的包路徑而已

最后看下pom文件:

<project xmlns="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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.yinyuetai.dubbo</groupId><artifactId>dubbo-consumer</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>dubbo-consumer Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring</artifactId></exclusion></exclusions></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.2.5.RELEASE</version></dependency><dependency><groupId>com.demo.dubbo</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies><build><finalName>dubbo-consumer</finalName></build> </project>

到此。dubbo的入門demo已經全部開發完成。

先通過Main.java中的main方法 啟動dubbo-provider項目。

然后將dubbo-consumer項目打成war包,部署到tomcat或其他web容器中。

在瀏覽器中訪問:localhost:tomcatport/dubbo-consumer/hello.html?name=test

tomcatport換成你本地的tomcat端口號

可以看到瀏覽器輸出:

?

說明我們的項目已經成功部署,可以成功調用了。

此時觀察dubbo管理后臺,可以看到如圖所示:

兩個應用分別對應我們開發的provider和consumer,而名字則是由<dubbo:application name>指定的。

一個消費者,一個服務提供者,和我們開發的東西完全吻合。到此為止dubbo的入門示例已經全部完成。

相關的代碼放在了碼云,懶的動手的可以直接下載運行看看效果。

碼云地址:

dubbo-api:https://git.oschina.net/li_mingzhu/dubbo-api.git

dubbo-provider:https://git.oschina.net/li_mingzhu/dubbo-provider.git

dubbo-consumer:https://git.oschina.net/li_mingzhu/dubbo-consumer.git

?

關于dubbo管理后臺,其實就是一個war包,只要部署在web容器運行即可。

暫時還沒有整理關于dubbo管理后臺部署的文章,后續整理了我會補發鏈接。

?

from:?https://www.cnblogs.com/leemz-coding/p/7113530.html

總結

以上是生活随笔為你收集整理的dubbo入门示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。