windows下dubbo-admin和zookeeper安装部署

本文介绍如何在Windows环境下安装部署zookeeper和dubbo-admin,并通过示例演示了基于Spring Boot的dubbo服务提供者(provider)与消费者(consumer)的配置与调用过程。

windows下dubbo-admin和zookeeper安装部署

 

  • 安装启动zookeeper
  • 下载zookeeper

官网地址:

http://mirrors.cnnic.cn/apache/zookeeper/zookeeper

  • 解压zookeeper-3.4.6到指定目录

比如:G:\zhq_foresee\work\dubbo\zookeeper

复制zookeeper\conf目录下的zoo_sample.cfg文件改名为zoo.cfg,无需做其他修改。

zoo.cfg配置了zookeeper的相关参数

说明:

clientPort:监听客户端连接的端口。

tickTime:基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。

我们可以对配置文件的端口等或者进行高级配置和集群配置例如:maxClientCnxns:限制连接到 ZooKeeper 的客户端的数量等

启动zookeeper

打开cmd,进入zookeeper\bin目录,直接双击zkServer.cmd文件或者执行zkServer.cmd命令

启动成功后的输出:

  • 下载安装tomcat
  • 安装dubboadmin
  • 下载dubbo-admin-2.5.3

官网:http://dubbo.io/Download-zh.htm

  • 解压dubbo-admin-2.5.3

将解压后的dubbo-admin-2.5.3拷贝到tomcat的apache-tomcat-6.0.35\webapps目录下,

然后将dubbo-admin-2.5.3目录名称改为ROOT

dubboadmin下的一个dubbo.properties文件配置了指向zookeeper的参数

  • 启动tomcat

打开cmd,进入apache-tomcat\\bin目录,输入startup.bat命令,即可启动tomcat.

  • 访问dubboadmin后台

打开浏览器,输入http://127.0.0.1:8080/,输入帐号密码root/root。进入

@注:基于zookeeper为3.4.6版本,dubbo在版本2.5.3以下时,jdk用<= 1.7

                                        版本 2.6.0时,可用jdk8

调用程序

1.  简化流程图

此流程图是一个简化的流程图,主要描述dubbo调用的全过程。

RPC调用时,Consumer根据负载均衡算法获取invoker,在执行完filter链以后,就开始平装数据,发送数据到socket中,consumer这一端通过ReentrantLock进入await状态。

Provider从socket获取数据后,执行receive方法, 接着执行Filter链,接着找到invoker通过代理对象执行Service,最后将返回结果写入socket。

Consumer收到返回结果以后,唤醒之前await的内容,然后将返回结果返回给调用方。

服务样例(HelloWorld):

自我理解:

dubbo+zokkerper服务相当于一监控服务(可以监控提供者和消费者,同时也可做限制措施,负载均衡)。

提供者(生产者) ----  提供数据和处理结果,一般作于底层数据处理和数据库打交道。

消费者  ----  提供服务调用,一般多为API接口。通过它来调用生产者。

生产者和消费者,通过注册的服务接口(service),来相互通信。

服务接口(service),可写为公共项目,进行嵌套,以供生产者和消费者共同使用。

      

提供者(dubbo-provider):

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>com.hw.dubbo.provider</groupId>
   <artifactId>dubbo-provider</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>dubbo-provider</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <!-- dubbo -->
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>dubbo</artifactId>
         <version>2.4.10</version>
         <exclusions>
            <exclusion>
               <artifactId>spring</artifactId>
               <groupId>org.springframework</groupId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.4.6</version>
         <exclusions>
            <exclusion>
               <artifactId>slf4j-log4j12</artifactId>
               <groupId>org.slf4j</groupId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

DubboProviderApplication:

package com.hw.dubbo.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(value = {"classpath:providers.xml"})
public class DubboProviderApplication {

   public static void main(String[] args) {
      SpringApplication.run(DubboProviderApplication.class, args);
   }
}

providers.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">
    <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服务提供方应用名,用于计算依赖关系 -->
    <dubbo:application name="dubbo-provider" owner="dubbo-provider"/>
    <!-- 定义 zookeeper 注册中心地址及协议 -->
    <dubbo:registry protocol="zookeeper" address="192.168.0.133:2181" client="zkclient"/>
    <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="-1"/>
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.hw.dubbo.remote.TestService" ref="testService" timeout="10000"/>
    <!-- 和本地 bean 一样实现服务 -->
    <bean id="testService" class="com.hw.dubbo.provider.impl.TestServiceImpl" />
</beans>

消费者(dubbo-consumer):

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>com.hw.dubbo.consumer</groupId>
   <artifactId>dubbo-consumer</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>dubbo-consumer</name>
   <description>Demo project for Spring Boot</description>

   <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
      <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
   </properties>

   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>

      <!-- dubbo -->
      <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>dubbo</artifactId>
         <version>2.4.10</version>
         <exclusions>
            <exclusion>
               <artifactId>spring</artifactId>
               <groupId>org.springframework</groupId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>org.apache.zookeeper</groupId>
         <artifactId>zookeeper</artifactId>
         <version>3.4.6</version>
         <exclusions>
            <exclusion>
               <artifactId>slf4j-log4j12</artifactId>
               <groupId>org.slf4j</groupId>
            </exclusion>
         </exclusions>
      </dependency>
      <dependency>
         <groupId>com.github.sgroschupf</groupId>
         <artifactId>zkclient</artifactId>
         <version>0.1</version>
      </dependency>
   </dependencies>

   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
      </plugins>
   </build>
</project>

TestController:

package com.hw.dubbo.consumer;
import com.hw.dubbo.remote.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class TestController {

    @Autowired
    private TestService testService;

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }

    @ResponseBody
    @RequestMapping(value = "/sayHello",method = RequestMethod.GET)
    public String sayHello(){
        System.out.println("controller test");
        System.out.println(testService.sayHello("world"));
        return "test successful";
    }
}

DubboConsumerApplication:

package com.hw.dubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication
@ImportResource(value = {"classpath:consumers.xml"})
public class DubboConsumerApplication {

   public static void main(String[] args) {
      SpringApplication.run(DubboConsumerApplication.class, args);
   }
}

consumers.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">
    <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服务提供方应用名,用于计算依赖关系 -->
    <dubbo:application name="dubbo-consumer" owner="dubbo-consumer"/>
    <!-- 定义 zookeeper 注册中心地址及协议 -->
    <dubbo:registry protocol="zookeeper" address="192.168.0.133:2181" client="zkclient"/>
    <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="-1"/>
    <!-- 生成远程服务代理,可以和本地 bean 一样使用 testService -->
    <dubbo:reference id="testService" interface="com.hw.dubbo.remote.TestService" />
</beans>

公共接口(interface)和实现类:

package com.hw.dubbo.remote;

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

package com.hw.dubbo.provider.impl;
import com.hw.dubbo.remote.TestService;
public class TestServiceImpl  implements TestService {
    @Override
    public String sayHello(String name) {
        return "test" + name + "!";
    }
}

@注: 两个服务的端口,provider - 8011,consumer - 8012。

测试:

通过客户端调用:

http://127.0.0.1:8012/sayHello

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值