Spring 集成 Dubbo

Duboo是什麼

  DUBBO是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,是阿里巴巴SOA服務化治理方案的核心框架,天天爲2,000+個服務提供3,000,000,000+次訪問量支持,並被普遍應用於阿里巴巴集團的各成員站點。
能夠看出在阿里內部普遍應用,相似的還有Spring Cloud。html

準備工做

準備兩虛機,我這裏用了CentOS7.2,加上本機可組成多提供者和消費者(固然一個虛機和不用虛機也能夠)
我準備的兩臺IP爲:192.168.124.129(用於 dubbo-admin) 192.168.124.131(用於 zookeeper 註冊中心)git

具體實現步驟

一、安裝zookeeper

在其中一臺虛機(192.168.124.131)中安裝zookeeper,我這裏安裝的是zookeeper-3.4.9github

下載後上傳到虛機任意目錄後解壓,我上傳到了 /usr/local 中文件夾名 zookeeper 後啓動web

/usr/local/zookeeper/bin/zkServer.sh start
[root@localhost ~]# /usr/local/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

二、部署dubbo-amdin

在另外一臺虛機(192.168.124.129)中部署dubbo-amdin 若是用的是duboo-admin 2.5.4的話是不能用jdk1.8,能夠從github下載源碼編譯,最新版是支持的
部署很簡單,
用編譯好的直接替換 Tomcat 下webapps/ROOT中文件,打開WEB-INF/dubbo.properties並進行以下修改spring

dubbo.registry.address=zookeeper://192.168.124.131:2181  註冊中心地址
dubbo.admin.root.password=root    --管理員密碼
dubbo.admin.guest.password=guest  --用戶密碼

打開 192.168.124.129:8080 出現登陸界面以下:json

  用root帳號登陸界面以下:spring-mvc

  登陸成功後看到以下界面,提供者和消費者都尚未,接下來的任務是註冊提供者服務器

三、提供者實現(Provider)

  先建項目:mvc

  最格結構以下:app

提供者配置文件applicationProvider.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-3.1.xsd
    http://code.alibabatech.com/schema/dubbo
    http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 具體的實現bean -->
    <bean id="demoService" class="io.kuaibao.provider.service.impl.UserServiceImpl" />
    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:application name="dubbo_provider"  />
    <!-- 使用zookeeper註冊中心暴露服務地址 -->
    <dubbo:registry address="zookeeper://192.168.124.131:2181" />
    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20881" />
    <!-- 聲明須要暴露的服務接口 -->
    <dubbo:service interface="io.kuaibao.provider.service.UserService" ref="demoService" />
</beans>

四、消費者

  消費者配置文件applicationConsumer.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:application name="dubbo_consumer" />
    <!-- 使用multicast廣播註冊中心暴露發現服務地址 -->
    <dubbo:registry  protocol="zookeeper" address="zookeeper://192.168.124.131:2181" />
    <!-- 生成遠程服務代理,能夠和本地bean同樣使用demoService -->
    <dubbo:reference id="demoService" interface="io.kuaibao.provider.service.UserService" check="false" />
</beans>

MVC配置 spring-mvc.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" 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/context
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <!-- 自動掃描  @Controller-->
    <context:component-scan base-package="io.kuaibao"/>

    <!--避免IE執行AJAX時,返回JSON出現下載文件 -->
    <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!-- 啓動SpringMVC的註解功能,完成請求和註解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON轉換器 -->
            </list>
        </property>
    </bean>


    <!-- 定義跳轉的文件的先後綴 ,視圖模式配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 文件上傳配置 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默認編碼 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <!-- 上傳文件大小限制爲31M,31*1024*1024 -->
        <property name="maxUploadSize" value="32505856"/>
        <!-- 內存中的最大值 -->
        <property name="maxInMemorySize" value="4096"/>
    </bean>


    <!-- 處理請求時返回json字符串的中文亂碼問題 -->
    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

</beans>

五、運行狀況

  運行提供者, 再看Dubbo Admin中提供者界面,已經註冊成功

  

  運得消費者後再看Dubbo Admin中消費者界面,已註冊成功

  

  打包提供者和消費者後發佈到 129服務器,後運行

  在Dubbo Admin 中看到提供者和消費者都是兩個

  

  

六、負載均衡

  增長負載,設置爲輪詢

  

  把本地代碼修改返回加上 本地 兩個字後,咱們刷新消費者能夠看到,有這兩個字和沒有信息交替出現,證實咱們的負載成功了

  

  

七、Github

  相關代碼放到了Github中 地址:https://github.com/kuaibao/kuaibao-dubbo

  只是最簡單的實現,若有好的建議請幫忙改進,謝謝!

相關文章
相關標籤/搜索