一個案例快速入門Dubbox開發

一個案例快速入門Dubbox開發java

在以前的 Dubbox的入門配置 一文中咱們瞭解如何部署註冊中心zookeeper。那麼接下來咱們就該實戰快速入門Dubbox框架開發。其實,咱們這裏實現的maven多模塊項目無非就是講各個package都拆分紅一個個單獨的項目,而後各個小項目之間經過依賴關係進行聯繫。parent模塊負責管理全部的jar。而提供者的業務就須要暴露給註冊中心;當消費者調用的時候就隨機提供一個提供者地址給消費者。 這裏我還要強調一點,dubbo在阿里中止維護後,由噹噹網繼續維護,並命名爲dubbox,而其並無上傳到maven中央倉庫,因此咱們使用maven中央倉庫提供的jar包時不行的,能夠用我提供的2.8.4版本的。git

<!--more-->github

項目源碼,點擊進入個人 GitHubweb

DubboxDemo項目導航帖spring

  1. Dubbox入門配置sql

  2. Dubbox入門之環境搭建數據庫

項目注意細節之處瀏覽器

  1. dubbox-xx.jar,特別要要注意,我這裏提供了一個版本的jar:dubbo2.8.4.jar傳送門: 百度雲 密碼:k8qs。
  2. 注意配置各個模塊之間的依賴關係。
  3. 運行項目首先運行service模塊,而後再運行web模塊。且注意二者的Tomcat的端口號不能相同。
  4. 運行項目以前首先須要在SecureCRT中打開服務器的zookeeper註冊中心。

項目測試環境spring-mvc

-|:-:|-:服務器

JDK1.8|Tomcat8|maven|IDEA

項目目錄結構

pom配置

解釋

  1. 這裏再也不貼pom的相關依賴,詳細內容請查看GitHub上的源碼。
  2. 注意parent父項目中的pom.xml中定義的是jar依賴的相關版本,並非寫入進parentpom的依賴都會被使用,只有子模塊調用了,纔會使用相應的依賴。

注意

  1. 注意dubbo-xx.jar不能使用maven倉庫中的依賴,能夠選擇使用我提供版本的jar。
  2. 除了上面說的框架提供的相關依賴,咱們還須要配置模塊間的依賴關係。
  3. 配置模塊間的依賴關係除了idea的Module Setting,還須要手動添加pom座標。
  4. Module Setting的依賴配置遵循調用那個模塊就配置哪一個模塊,pom座標遵循常見的三層架構設計。

服務端配置

Tomcat

  1. 須要注意的就是端口號,部署到服務器上的項目(模塊—)必須佔用的端口號不一樣,而在idea中除了有HTTP port、還有JMX port,這兩個端口配置都不能重複出現。
  2. 啓動項目(模塊)時,先啓動service生產者,再啓動web消費者。

zookeeper

  1. zookeeper稱爲註冊中心,因此啓動service模塊前首先要啓動zookeeper。啓動方式就是進入bin目錄中輸入./zkServer.sh start
  2. 須要在service以及web模塊對應的spring配置文件中註冊dubbo,而且配置鏈接zookeeper的地址。、

Spring環境配置

介紹

Spring的配置其實一共有三個部分:

  • spring-service
  • spring-dao
  • springmvc

分別對應的模塊

  • service模塊
  • dao模塊
  • web模塊

注意 咱們知道配置了spring.xml,就須要在web.xml中加載這些配置文件,由於咱們已經創建了各個模塊之間的依賴關係,因此,咱們僅須要在daoservice模塊任意一個的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。

對應servicedao任意一個模塊中的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

注意

  1. 注意使用dubbo@Reference註解完成依賴注入,但絕對不能使用@Autowird之類的註解完成注入的,這裏調用的服務層是由遠端提供的,並非本地的服務對象,因此不能使用@Autowird注入。

咱們看一下實際的web模塊的目錄結構:

service

如上所說,當咱們調用的服務是由遠端提供的,好比在這個案例中服務層是由zookeeper進行分配管理的,就使用@REference進行注入,若是你調用本地的服務,就可使用@Autowired完成注入了。

看一下其目錄結構

最後咱們再看一下dao模塊的目錄結構

啓動項目

  1. 先鏈接服務器並打開zookeeper

  1. 先啓動service模塊,再啓動web模塊

我這裏再Tomcat中配置service模塊的端口是9001;配置web模塊的端口是9101

  1. 在瀏覽器中查看項目功能

<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.

相關文章
相關標籤/搜索