品優(yōu)購(gòu)學(xué)習(xí)筆記一-Dubbox框架

品優(yōu)購(gòu)學(xué)習(xí)筆記一-Dubbox框架

1.dubbox簡(jiǎn)介

Dubbox 是一個(gè)分布式服務(wù)框架,其前身是阿里巴巴開(kāi)源項(xiàng)目Dubbo 霹崎,被國(guó)內(nèi)電商及互聯(lián)網(wǎng)項(xiàng)目中使用,后期阿里巴巴停止了該項(xiàng)目的維護(hù),當(dāng)當(dāng)網(wǎng)便在Dubbo基礎(chǔ)上進(jìn)行優(yōu)化褥赊,并繼續(xù)維護(hù),為了與原有的Dubbo區(qū)分莉恼,故將其命名為Dubbox拌喉。

Dubbox 致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案俐银。簡(jiǎn)單的說(shuō)司光,dubbox就是個(gè)服務(wù)框架,如果沒(méi)有分布式的需求悉患,其實(shí)是不需要用的残家,只有在分布式的時(shí)候,才有dubbox這樣的分布式服務(wù)框架的需求售躁,并且本質(zhì)上是個(gè)服務(wù)調(diào)用的東東坞淮,說(shuō)白了就是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架。


1557189928924.png

節(jié)點(diǎn)說(shuō)明:

  • Provider: 暴露服務(wù)的服務(wù)提供方陪捷。

  • Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方回窘。

  • Registry: 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心。

  • Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心市袖。

  • Container: 服務(wù)運(yùn)行容器

調(diào)用關(guān)系說(shuō)明:

  • 服務(wù)容器負(fù)責(zé)啟動(dòng)啡直,加載,運(yùn)行服務(wù)提供者苍碟。

  • 服務(wù)提供者在啟動(dòng)時(shí)酒觅,向注冊(cè)中心注冊(cè)自己提供的服務(wù)。

  • 服務(wù)消費(fèi)者在啟動(dòng)時(shí)微峰,向注冊(cè)中心訂閱自己所需的服務(wù)舷丹。

  • 注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更蜓肆,注冊(cè)中心將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者颜凯。

  • 服務(wù)消費(fèi)者谋币,從提供者地址列表中,基于軟負(fù)載均衡算法症概,選一臺(tái)提供者進(jìn)行調(diào)用蕾额,如果調(diào)用失敗,再選另一臺(tái)調(diào)用彼城。

  • 服務(wù)消費(fèi)者和提供者凡简,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心精肃。

2.注冊(cè)中心zookeeper

2.1 Zookeeper 介紹

官方推薦使用 zookeeper 注冊(cè)中心秤涩。注冊(cè)中心負(fù)責(zé)服務(wù)地址的注冊(cè)與查找,相當(dāng)于目錄服務(wù)司抱,服務(wù)提供者和消費(fèi)者只在啟動(dòng)時(shí)與注冊(cè)中心交互筐眷,注冊(cè)中心不轉(zhuǎn)發(fā)請(qǐng)求,壓力較小习柠。

Zookeeper 是 Apacahe Hadoop 的子項(xiàng)目匀谣,是一個(gè)樹(shù)型的目錄服務(wù),支持變更推送资溃,適合作為Dubbox 服務(wù)的注冊(cè)中心武翎,工業(yè)強(qiáng)度較高,可用于生產(chǎn)環(huán)境溶锭。

2.2 zookeeper在ubuntu系統(tǒng)下安裝

安裝步驟:

  • 安裝jdk
  • 下載zookeeper安裝包宝恶,上傳到服務(wù)器
  • 解壓
tar -zxvf zookeeper-3.4.6.tar.gz
  • 進(jìn)入 zookeeper-3.4.6 目錄,創(chuàng)建 data 文件夾趴捅。
cd zookeeper-3.4.6
mkdir data
  • 進(jìn)入conf目錄 垫毙,把 zoo_sample.cfg 改名為 zoo.cfg
cd conf
mv zoo_sample.cfg zoo.cfg
  • 打開(kāi)zoo.cfg ,修改并添加以下內(nèi)容:
#修改 寫(xiě)自己的data目錄的路徑,進(jìn)入data目錄 pwd查看當(dāng)前目錄路徑
dataDir=/root/zookeeper-3.4.6/data
#添加拱绑,改成自己服務(wù)器的ip
server.1=182.254.227.85:2888:3888
server.2=10.0.40.112:2888:3888
server.3=10.0.42.145:2888:3888

  • 添加myid
cd data
sudo vim myid
#將相對(duì)應(yīng)的編號(hào)寫(xiě)入

1557190779682.png
  • 進(jìn)入bin目錄综芥,啟動(dòng)服務(wù)輸入命令
./zkServer.sh start
1557190846515.png

關(guān)閉:

./zkServer.sh stop

查看狀態(tài)

./zkServer.sh status

2.3Dubbox本地 JAR包部署與安裝

Dubbox的jar包并沒(méi)有部署到Maven的中央倉(cāng)庫(kù)中,大家在Maven的中央倉(cāng)庫(kù)中可以查找到Dubbo的最終版本是2.5.3 , 阿里巴巴解散了Dubbo團(tuán)隊(duì)后由當(dāng)當(dāng)網(wǎng)繼續(xù)維護(hù)此項(xiàng)目猎拨,并改名為 Dubbox ,坐標(biāo)不變膀藐,版本變更了,但是并沒(méi)有提交到中央倉(cāng)庫(kù)红省。

我們現(xiàn)在需要手動(dòng)將Dubbox的jar包安裝到我的本地倉(cāng)庫(kù)中.

先將dubbo-2.8.4.jar包放到d:\setup, 然后輸入命令

mvn install:install-file -Dfile=d:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

資源文件 以及相關(guān)配置可以在作者的github倉(cāng)庫(kù)查看

3.Demo

項(xiàng)目目錄:

1557191531071.png

3.1服務(wù)提供者開(kāi)發(fā)

創(chuàng)建maven工程额各,pom.xml引入

<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>cn.smallmartial.demo</groupId>
  <artifactId>dubboxdemo-service</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <properties>      
        <spring.version>4.2.4.RELEASE</spring.version>
   </properties>
    
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>   

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.8.4</version>            
        </dependency> 
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.11.0.GA</version>
        </dependency>
        
    </dependencies>
   <build>  
      <plugins>
          <plugin>  
              <groupId>org.apache.maven.plugins</groupId>  
              <artifactId>maven-compiler-plugin</artifactId>  
              <version>2.3.2</version>  
              <configuration>  
                  <source>1.8</source>  
                  <target>1.8</target>  
              </configuration>  
          </plugin>  
          <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <configuration>
                    <!-- 指定端口 -->
                    <port>8080</port>
                    <!-- 請(qǐng)求路徑 -->
                    <path>/</path>
                </configuration>
          </plugin>
      </plugins>  
    </build>
</project>

在工程目錄webapps下創(chuàng)建WEB-INF文件夾,創(chuàng)建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:applicationContext*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    
</web-app>

創(chuàng)建業(yè)務(wù)接口

package cn.smallmartial.demo.service;

public interface UserService {

    public String getName();
}

創(chuàng)建實(shí)現(xiàn)類(lèi),service需要導(dǎo)入 alibaba提供的

package cn.smallmartial.demo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;

import cn.smallmartial.demo.service.UserService;

@Service
public class UserServiceImpl implements UserService {

    @Override
    public String getName() {
        return "small martial";
    }

}

編譯配置文件类腮,寫(xiě)入src/main/resources

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    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
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

   
    <dubbo:application name="dubboxdemo-service"/>  
    <dubbo:registry address="zookeeper://182.254.227.85:2181"/> 
    <dubbo:annotation package="cn.smallmartial.demo.service.impl" /> 
   
</beans>

運(yùn)行,引用的是mavean插件臊泰,用mavean方式啟動(dòng)

tomcat7:run

3.2服務(wù)消費(fèi)者開(kāi)發(fā)

創(chuàng)建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依賴(lài)蚜枢,同“dubboxdemo-service”工程缸逃。區(qū)別就是把tomcat插件的運(yùn)行端口改為8081 。

pom和service用的一樣厂抽,復(fù)制即可

在工程目錄webapps下創(chuàng)建WEB-INF文件夾需频,創(chuàng)建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">  
   <!-- 解決post亂碼 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>   
    
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 指定加載的配置文件 ,通過(guò)參數(shù)contextConfigLocation加載-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>


 
    
</web-app>

將“dubboxdemo-service”工程的cn.smallmartial.demo.service包以及下面的接口拷貝至此工程筷凤。

編寫(xiě)controller

package cn.smallmartial.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.dubbo.config.annotation.Reference;

import cn.smallmartial.demo.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {

    @Reference
    private UserService userService;
    
    @RequestMapping("/showname")
    @ResponseBody
    public String showName() {
        
        return userService.getName();
    }
    
}

編寫(xiě)spring配置文件

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    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
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    
    <mvc:annotation-driven >
        <mvc:message-converters register-defaults="false">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">  
                <constructor-arg value="UTF-8" />
            </bean>  
        </mvc:message-converters>   
    </mvc:annotation-driven>

    <dubbo:application name="dubboxdemo-web"/>  
    <dubbo:registry address="zookeeper://182.254.227.85:2181"/> 
    <dubbo:annotation package="cn.smallmartial.demo.controller" /> 

</beans>

運(yùn)行,引用的是mavean插件昭殉,用mavean方式啟動(dòng)

tomcat7:run

運(yùn)行結(jié)果:

1557148668384.png

4.管理端安裝

  • 上傳dobbox.war文件

    資源文件在github

  • 服務(wù)器部署tomcat

管理端使用

打開(kāi)瀏覽器,輸入http://192.168.25.132:8080/dubbo-admin/ ,登錄用戶(hù)名和密碼均為root 進(jìn)入首頁(yè)藐守。 (192.168.25.132:)是我部署的linux主機(jī)地址挪丢。
1557192563827.png

github地址:https://github.com/smallmartial/springbootdemo/tree/master/dobbox-demo

1557192838851.png

工具地址:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卢厂,隨后出現(xiàn)的幾起案子乾蓬,更是在濱河造成了極大的恐慌,老刑警劉巖慎恒,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件任内,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡融柬,警方通過(guò)查閱死者的電腦和手機(jī)死嗦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粒氧,“玉大人越除,你說(shuō)我怎么就攤上這事⊥舛ⅲ” “怎么了廊敌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)门怪。 經(jīng)常有香客問(wèn)我骡澈,道長(zhǎng),這世上最難降的妖魔是什么掷空? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任肋殴,我火速辦了婚禮,結(jié)果婚禮上坦弟,老公的妹妹穿的比我還像新娘护锤。我一直安慰自己,他們只是感情好酿傍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布烙懦。 她就那樣靜靜地躺著,像睡著了一般赤炒。 火紅的嫁衣襯著肌膚如雪氯析。 梳的紋絲不亂的頭發(fā)上亏较,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音掩缓,去河邊找鬼雪情。 笑死,一個(gè)胖子當(dāng)著我的面吹牛你辣,可吹牛的內(nèi)容都是我干的巡通。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舍哄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宴凉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起表悬,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弥锄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后签孔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體叉讥,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年饥追,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了图仓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡但绕,死狀恐怖救崔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捏顺,我是刑警寧澤六孵,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站幅骄,受9級(jí)特大地震影響劫窒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拆座,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一主巍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挪凑,春花似錦孕索、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春肄渗,著一層夾襖步出監(jiān)牢的瞬間镇眷,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工恳啥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偏灿,地道東北人丹诀。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓钝的,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铆遭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子硝桩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容