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保持一致!

相关文章
相关标签/搜索