dubbo dubbo-admin dubbo-monitor的最小環境搭建

  • dubbo的簡介

        dubbo是阿里開源的一套分佈式框架,目前在不少互聯網企業中有使用,dubbo的解耦作的很好,學習使用成本也很低,讓你的項目很簡單的就實現了分佈式、服務發現、故障切換等看似很高大上的功能,一些具體的介紹網上不少, 這篇文檔簡單介紹下整套環境的的搭建。nginx

  • dubbo consumer provider 

        dubbo consumer provider 註冊中心,是須要的核心部分,admin,monitor不搭建,對業務也沒有影響,這裏註冊中心,咱們使用zookeeper實現,也是目前生產環境中使用的最多的中間件。git

zookeeper的配置啓動

       首先下載zookeeper,這裏使用的是3.4.9的穩定版,將conf/zoo_sample.cfg 複製一份,重名爲zoo.cfg修改配置以下web

dataDir=/tmp/zookeeper
clientPort=2181

  這兩項配置,按照本機的實際狀況配置,運行 zkServer.cmd,啓動 zookeeperspring

dubbo-demo

新建maven項目,以下圖所示apache

其中,api-dubbo是聲明的接口,api

consumer-dubbo是消費者服務器

provider-dubbo是提供者網絡

根pom配置app

<properties>
        <org.springframework.version>4.1.3.RELEASE</org.springframework.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.3.3</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>

api-dubbo中 只有一個接口文件,框架

public interface DemoService {
    public String sayHello(String name);
}

consumer-dubbo 

public class Consumer {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"dubbo-demo-consumer.xml"});
        context.start();
        DemoService demoService = (DemoService)context.getBean("demoService"); // get service invocation proxy
        String hello = demoService.sayHello("world");
        System.out.println( hello );
    }
}

內容很簡單,加載配置文件啓動spring,獲取bean,調用其中的方法sayHello

配置文件dubbo-demo-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.xsd
        http://code.alibabatech.com/schema/dubbo
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        ">
    <!-- 消費方應用名 -->
    <dubbo:application name="consumer-of-helloworld-app"  />
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
    <!-- 生成遠程服務代理 -->
    <dubbo:reference id="demoService" interface="com.kent.dubbo.demo.DemoService" />
</beans>

provider-dubbo

public class DemoServiceImpl  implements DemoService {
    public String sayHello(String name) {
        System.out.println("[" + new SimpleDateFormat("HH:mm:ss").format(new Date()) + "] Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
        return "Hello " + name + ", response form provider: " + RpcContext.getContext().getLocalAddress();
    }
}

DempServiceImpl實現api-dubbo中的接口。

public class DubboProviderDemo {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"dubbo-demo-provider.xml"});
        context.start();
        System.in.read(); 
    }
}

main方法也很簡單 加載配置文件啓動spring

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress SpringFacetInspection -->
<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="hello-world-app"  />
     <!-- zk地址 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" />
    <!-- 本地端口 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 聲明須要暴露的服務接口 -->
    <dubbo:service interface="com.kent.dubbo.demo.DemoService" ref="demoService" />
    <bean id="demoService" class="com.kent.dubbo.demo.DemoServiceImpl" />
</beans>

運行時,首先啓動DubboProviderDemo

啓動Consumer

其中consumer的配置很簡單

provider的配置中,本機啓動了20880端口,用於接收consumer的請求。

 zk究竟在作什麼?

第一次使用的人都很疑惑,zk到底是在作什麼。

傳統企業開發中,如webservice或http服務,客戶端若是要請求服務端的接口,必需要知道服務端的接口信息,而當客戶端數量愈來愈多後,服務端必需要增長機器,實現集羣,以支撐請求,這時候,每每會增長F5或nginx之類負載設備,每增長一臺服務器,就要修改,刷新負載的配置。

能夠腦補下,當N個服務端,N個客戶端之間,幾百上千臺服務器的狀況下,還可能出現各類服務器當機,網絡中斷的狀況下,這時,是什麼狀況。

而dubbo與之不一樣的是,dubbo實現的是服務的動態尋址與路由

客戶端和服務端之間,經過ZK,實現服務的訂閱。ZK充當的角色是服務註冊查找中心

例子中

服務端啓動時去ZK註冊com.kent.dubbo.demo.DemoService接口的節點信息,包括了調用接口所須要的信息。

客戶端啓動時去ZK查找com.kent.dubbo.demo.DemoService接口的節點信息,

當接口調用時,客戶端直接去調用對應的服務端接口。

而當服務端的服務發生變化時,服務端和ZK之間的心跳會通知ZK節點的變化信息,ZK同時也會通知客戶端,客戶端則在下次請求時,就按照變化後的信息調用服務端接口。

  • dubbo-admin 的部署

dubbo-admin 管理模塊,實現服務治理的一些功能。

修改WEB-INF下的dubbo.properties

的ZK配置後,發佈在TOMCAT下

就能夠看到以前例子中信息。

注意下,一些同窗可能在TOMCAT啓動時會遇到

org.springframework.beans.factory.BeanCreationException: Error creating bean wit
h name 'uriBrokerService': Cannot create inner bean '(inner bean)' of type .......

這是由於JDK使用的1.8 ,網上下載的war包,一些依賴包的版本須要修改後才能使用1.8,換回1.7這個問題就能夠解決了,或者去git上拉代碼,本身編譯。

具體的admin的介紹,就不詳細說了。

 

  • dubbo-monitor的部署

monitor是監控模塊。部署前修改conf下的dubbo.properties

dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.port=7070
dubbo.jetty.port=8089
dubbo.jetty.directory=D:/dubbo-monitor-simple-2.5.3/monitor
dubbo.charts.directory=D:/dubbo-monitor-simple-2.5.3/monitor/charts
dubbo.statistics.directory=D:/dubbo-monitor-simple-2.5.3/monitor/statistics
dubbo.log4j.file=D:/dubbo-monitor-simple-2.5.3/logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

其中主要是須要修改monitor的路徑位置,根據實際的信息配置。

另外 consumer和provider須要增長配置

<dubbo:monitor protocol="registry"/>

修改完畢後運行bin下的start.bat

效果以下

常常容易遇到的問題是,界面出來了 可是 statistics和charts 就是圖中的圖表是出不來,可能的緣由以下:


1 配置中的路徑若是有問題

2 monitor的lib中使用的dubbo jar包的版本 須要和consumer和provider保持一致!

相關文章
相關標籤/搜索