一個案例快速入門Dubbox開發java
在以前的 Dubbox的入門配置 一文中咱們瞭解如何部署註冊中心zookeeper
。那麼接下來咱們就該實戰快速入門Dubbox
框架開發。其實,咱們這裏實現的maven多模塊項目無非就是講各個package
都拆分紅一個個單獨的項目,而後各個小項目之間經過依賴關係進行聯繫。parent
模塊負責管理全部的jar
。而提供者的業務就須要暴露給註冊中心;當消費者調用的時候就隨機提供一個提供者地址給消費者。 這裏我還要強調一點,dubbo
在阿里中止維護後,由噹噹網繼續維護,並命名爲dubbox
,而其並無上傳到maven中央倉庫,因此咱們使用maven中央倉庫提供的jar包時不行的,能夠用我提供的2.8.4
版本的。git
<!--more-->github
項目源碼,點擊進入個人 GitHubweb
DubboxDemo項目導航帖spring
Dubbox入門配置sql
項目注意細節之處瀏覽器
dubbox-xx.jar
,特別要要注意,我這裏提供了一個版本的jar:dubbo2.8.4.jar
傳送門: 百度雲 密碼:k8qs。service
模塊,而後再運行web
模塊。且注意二者的Tomcat的端口號不能相同。zookeeper
註冊中心。項目測試環境spring-mvc
-|:-:|-:服務器
JDK1.8|Tomcat8|maven|IDEA
項目目錄結構
parent
父項目中的pom.xml
中定義的是jar依賴的相關版本,並非寫入進parent
中pom
的依賴都會被使用,只有子模塊調用了,纔會使用相應的依賴。dubbo-xx.jar
不能使用maven倉庫中的依賴,能夠選擇使用我提供版本的jar。Module Setting
,還須要手動添加pom
座標。Module Setting
的依賴配置遵循調用那個模塊就配置哪一個模塊,pom
座標遵循常見的三層架構設計。HTTP port
、還有JMX port
,這兩個端口配置都不能重複出現。service
生產者,再啓動web
消費者。zookeeper
稱爲註冊中心,因此啓動service
模塊前首先要啓動zookeeper
。啓動方式就是進入bin
目錄中輸入./zkServer.sh start
。service
以及web
模塊對應的spring配置文件中註冊dubbo
,而且配置鏈接zookeeper
的地址。、Spring的配置其實一共有三個部分:
spring-service
spring-dao
springmvc
分別對應的模塊
service
模塊dao
模塊web
模塊注意 咱們知道配置了spring.xml
,就須要在web.xml
中加載這些配置文件,由於咱們已經創建了各個模塊之間的依賴關係,因此,咱們僅須要在dao
或service
模塊任意一個的web.xml
中使用通配符的方式加載配置文件便可。
beans-dao.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 數據庫鏈接池 --> <!-- 加載配置文件 --> <context:property-placeholder location="classpath:properties/db.properties"/> <!-- 數據庫鏈接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="driverClassName" value="${jdbc.driver}"/> <property name="maxActive" value="10"/> <property name="minIdle" value="5"/> </bean> <!-- 讓spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 數據庫鏈接池 --> <property name="dataSource" ref="dataSource"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="cn.mapper"/> </bean> </beans>
beans-service.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.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 用dubbo協議在20881端口暴露服務 --> <dubbo:protocol name="dubbo" port="20881"/> <!-- 當前應用的名稱(是註冊中心識別的名稱) --> <dubbo:application name="dubboxdemo-service"/> <!-- 註冊中心地址(zookeeper) --> <dubbo:registry address="zookeeper://192.168.148.128:2181"/> <!-- 配置dubbo的包掃描 --> <dubbo:annotation package="cn.service.impl"/> </beans>
這裏咱們須要注意的就是註冊中心地址必定要填寫正確,首先你須要打開服務器,聯網,並使用SecureCRT啓動zookeeper
,這是正常啓動項目的前提。第二點就是注意配置dubbo的包掃描,可使用我提供的dubbox-2.8.4.jar
,必定不要使用maven倉庫的jar,那樣必定會報錯的。這裏配置的包掃描,一樣會掃描@Controller
之類的Spring的註解,若是你使用maven倉庫的dubbox,你會發現根本不能掃描到@RequestMapping
,訪問項目映射就是404。
對應service
、dao
任意一個模塊中的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_2_5.xsd" version="2.5"> <!-- 加載spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/beans-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
spring-web.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" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 當前應用名稱(是註冊中心識別的名稱) --> <dubbo:application name="dubboxdemo-web"/> <!-- 註冊中心地址(zookeeper) --> <dubbo:registry address="zookeeper://192.168.148.128:2181"/> <!-- 配置包掃描(一樣不須要SpringMVC的包掃描) --> <dubbo:annotation package="cn.controller"/> <!-- SpringMVC的基本控制器 --> <mvc:annotation-driven/> <!-- 配置springmvc的視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
Controller
注意
dubbo
的@Reference
註解完成依賴注入,但絕對不能使用@Autowird
之類的註解完成注入的,這裏調用的服務層是由遠端提供的,並非本地的服務對象,因此不能使用@Autowird
注入。咱們看一下實際的web
模塊的目錄結構:
service
如上所說,當咱們調用的服務是由遠端提供的,好比在這個案例中服務層是由zookeeper
進行分配管理的,就使用@REference
進行注入,若是你調用本地的服務,就可使用@Autowired
完成注入了。
看一下其目錄結構
最後咱們再看一下dao
模塊的目錄結構
zookeeper
service
模塊,再啓動web
模塊我這裏再Tomcat中配置service
模塊的端口是9001;配置web
模塊的端口是9101
<br/>
若是你們有興趣,歡迎你們加入個人Java交流羣:671017003 ,一塊兒交流學習Java技術。博主目前一直在自學JAVA中,技術有限,若是能夠,會盡力給你們提供一些幫助,或是一些學習方法,固然羣裏的大佬都會積極給新手答疑的。因此,別猶豫,快來加入咱們吧!
<br/>
If you have some questions after you see this article, you can contact me or you can find some info by clicking these links.