zoukankan      html  css  js  c++  java
  • Dubbo与Zookeeper在Window上的安装与简单使用

    一:Dubbo是什么?有什么用途??

      使用Dubbo可以将应用分布到多个服务器上,当有访问时,Dubbo有帮你管理自动将请求分配给合适得到服务器去执行,即建立多个生产者,建立多个消费者,自动匹配生产者与消费者,以便达到负载均衡。关于集群与负载均衡的一些概念的简单解释也可以参考《大话集群和负载均衡

    二:Dubbo与Zookeeper的安装

    1:官网 【https://www.apache.org/dyn/closer.cgi/zookeeper/ 】下载Zookeeper稳定版

    2:官网【  http://dubbo.apache.org/en-us/ 】去 github 下载稳定版,()

    2:解压Zookeeper到目录【D:ookeeper】修改目录【D:ookeeperzookeeper-3.4.12zookeeper-3.4.12conf】 下的【 zoo_sample.cfg 】文件为【zoo.cfg】

    3:点击【D:ookeeperzookeeper-3.4.12zookeeper-3.4.12in】目录下的【 zkServer.cmd】启动Zookeeper,显示如下即成功

    4:参考《 solr服务器搭建与Tomact整合及使用 》配置一台专门管理的Dubbo服务器

    5:配置好后,将 Dubbo-admin的 war 包解压放到你给Dubbo配置的服务器的根目录下【D:Tomactapache-tomcat-8.0.53-dubbowebappsROOT】war包可以自己导入下载的Dubbo的maven文件生成。这是我生成的2.6.0版本的war包。链接:https://pan.baidu.com/s/1WHJKemdyLb8Sveq7a1PCuw 密码:1w2w

    6:然后启动   Tomact-Dubbo   服务器,启动时一定要保持Zookeeper开启。然后等带启动成功。打开浏览器输入你配置的端口

    注意:第一次输入的时候会让你登陆,Dubbo默认的用户名是root 密码是root

    以后就可以在这里管理生产者和消费者了。

     三:Dubbo的具体使用

    Dubbo的主要作用就是帮助将服务发布到集群中,

    1:Dubbo的执行过程:

    官方手册给出的架构如图所示   http://dubbo.apache.org/en-us/docs/user/preface/architecture.html

    0:服务容器负责启动,加载,运行服务提供者

    1:服务提供者在启动时,向注册中心注册自己提供的服务,我们采用的注册中心就是Zookeeper。

    2:服务消费者在启动时,向注册中心订阅自己所需的服务。

    3:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    2:Dubbo分布式在代码中的体现:

    采用分布式的架构,对于代码来说,我们需要对代码结构进行拆分,一般都使用Maven进行,可以参考《  Maven的继承与聚合——多模块开发   》,拆分后每一部分基本内容不会改变,改变的是需要在每一个拆分的单元中根据其需要加入需要的Dubbo成分,接下来就针对拆分后不同的角色进行实例:

    3:Dubbo发布服务:

    即上述途中的步骤:1 即对于服务提供者

    首先创建一个maven项目dubbo-demo-provider

    pom.xml加入依赖:

     1 <dependencies>
     2     <dependency>
     3         <groupId>com.alibaba</groupId>
     4         <artifactId>dubbo</artifactId>
     5         <version>2.6.0</version>
     6     </dependency>
     7     <dependency>
     8         <groupId>com.101tec</groupId>
     9         <artifactId>zkclient</artifactId>
    10         <version>0.10</version>
    11     </dependency>
    12     <dependency>
    13         <groupId>org.apache.curator</groupId>
    14         <artifactId>curator-framework</artifactId>
    15         <version>4.0.1</version>
    16     </dependency>
    17     <dependency>
    18         <groupId>com.alibaba</groupId>
    19         <artifactId>fastjson</artifactId>
    20         <version>1.2.46</version>
    21     </dependency>
    22     <dependency>
    23         <groupId>log4j</groupId>
    24         <artifactId>log4j</artifactId>
    25         <version>1.2.17</version>
    26     </dependency>
    27     <dependency>
    28         <groupId>org.slf4j</groupId>
    29         <artifactId>slf4j-api</artifactId>
    30         <version>1.7.25</version>
    31     </dependency>
    32     <dependency>
    33         <groupId>org.apache.commons</groupId>
    34         <artifactId>commons-lang3</artifactId>
    35         <version>3.4</version>
    36     </dependency>
    37     <dependency>
    38         <groupId>io.netty</groupId>
    39         <artifactId>netty-all</artifactId>
    40         <version>4.0.35.Final</version>
    41     </dependency>
    42 </dependencies>
    pom.xml

    然后定义一个服务接口: 

     1 package com.xqc.service;
     2  
     3 /**
     4  * 服务提供者接口
     5  *
     6  */
     7 public interface DemoProviderService {
     8  
     9     public String sayHello(String name);
    10 }
    DemoProviderService

    再定义实现类

     1 package com.xqc.service.impl;
     2  
     3 import com.xqc.service.DemoProviderService;
     4  
     5 /**
     6  * 服务提供者接口实现类
     7  *
     8  */
     9 public class DemoProviderServiceImpl implements DemoProviderService{
    10  
    11     public String sayHello(String name) {
    12         return "服务  1 ";
    13     }
    14  
    15 }
    DemoProviderServiceImpl

    配置Dubbo的配置文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     4        xmlns="http://www.springframework.org/schema/beans"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     6        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     7  
     8     <!-- 提供方应用名称, 用于计算依赖关系 -->
     9     <dubbo:application name="demo-provider"/>
    10  
    11     <!-- 使用zookeeper注册中心暴露服务地址 -->
    12     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    13  
    14     <!-- 使用dubbo协议在20880端口暴露服务 -->
    15     <dubbo:protocol name="dubbo" port="20880"/>
    16  
    17     <!-- service实现类作为本地的一个bean -->
    18     <bean id="demoProviderService" class="com.xqc.service.impl.DemoProviderServiceImpl"/>
    19  
    20     <!-- 声明需要暴露的服务接口 -->
    21     <dubbo:service interface="com.xqc.service.DemoProviderService" ref="demoProviderService"/>
    22      
    23  
    24 </beans>

    编写测试类:

     1 import java.io.IOException;
     2  
     3 import org.springframework.context.support.ClassPathXmlApplicationContext;
     4  
     5 public class ProviderTest {
     6  
     7     public static void main(String[] args) {
     8         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-demo-provider.xml"});
     9         context.start();
    10         System.out.println("服务提供者注册成功(端口:20880)");
    11         try {
    12             System.in.read();
    13         } catch (IOException e) {
    14             // TODO Auto-generated catch block
    15             e.printStackTrace();
    16         }
    17         context.close();
    18     }
    19 }
    ProviderTest

    然后启动Zookeeper,运行测试类,即可发布服务到Zookeeper注册中心去。

    查看控制台输出:服务提供者注册成功(端口20880)

    然后到Tomact-Dubbo的管理控制中心:【首页>服务治理>服务 】  即可查看到发布的服务

    4:消费Dubbo服务:

    即上述途中的步骤:2 3  即对于服务消费者

    创建maven项目 dubbo-demo-consumer

    pom.xml配置下:

     1 <dependencies>
     2     <dependency>
     3         <groupId>com.alibaba</groupId>
     4         <artifactId>dubbo</artifactId>
     5         <version>2.6.0</version>
     6     </dependency>
     7     <dependency>
     8         <groupId>com.101tec</groupId>
     9         <artifactId>zkclient</artifactId>
    10         <version>0.10</version>
    11     </dependency>
    12     <dependency>
    13         <groupId>org.apache.curator</groupId>
    14         <artifactId>curator-framework</artifactId>
    15         <version>4.0.1</version>
    16     </dependency>
    17     <dependency>
    18         <groupId>com.alibaba</groupId>
    19         <artifactId>fastjson</artifactId>
    20         <version>1.2.46</version>
    21     </dependency>
    22     <dependency>
    23         <groupId>log4j</groupId>
    24         <artifactId>log4j</artifactId>
    25         <version>1.2.17</version>
    26     </dependency>
    27     <dependency>
    28         <groupId>org.slf4j</groupId>
    29         <artifactId>slf4j-api</artifactId>
    30         <version>1.7.25</version>
    31     </dependency>
    32     <dependency>
    33         <groupId>org.apache.commons</groupId>
    34         <artifactId>commons-lang3</artifactId>
    35         <version>3.4</version>
    36     </dependency>
    37     <dependency>
    38         <groupId>io.netty</groupId>
    39         <artifactId>netty-all</artifactId>
    40         <version>4.0.35.Final</version>
    41     </dependency>
    42 </dependencies>
    pom.xml

    编写Dubbo的配置文件  dubbo-demo-consumer.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3        xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     4        xmlns="http://www.springframework.org/schema/beans"
     5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
     6        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     7  
     8     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
     9     <dubbo:application name="demo-consumer"/>
    10  
    11     <!-- 使用zookeeper注册中心暴露服务地址 -->
    12     <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    13  
    14     <!-- 生成远程服务代理,可以和本地bean一样使用demoProviderService  check属性,启动的时候是否检查 一般设置为false 启动的时候不检查-->
    15     <dubbo:reference id="demoProviderService" check="false" interface="com.xqc.service.DemoProviderService"/>
    16  
    17 </beans>

    然后创建所需的服务提供者的接口

     1 package com.xqc.service;
     2  
     3 /**
     4  * 服务提供者接口
     5  *
     6  */
     7 public interface DemoProviderService {
     8  
     9     public String sayHello(String name);
    10 }
    DemoProviderService

    编写测试类

     1 import java.io.IOException;
     2  
     3 import org.springframework.context.support.ClassPathXmlApplicationContext;
     4  
     5 import com.xqc.service.DemoProviderService;
     6  
     7 public class ConsumerTest {
     8  
     9     public static void main(String[] args) {
    10         ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-demo-consumer.xml"});
    11         context.start();
    12         DemoProviderService demoProviderService=(DemoProviderService) context.getBean("demoProviderService");
    13         String result=demoProviderService.sayHello("你好");
    14         System.out.println("远程调用结果:"+result);
    15         try {
    16             System.in.read();
    17         } catch (IOException e) {
    18             // TODO Auto-generated catch block
    19             e.printStackTrace();
    20         }
    21         context.close();
    22     }
    23 }
    ConsumerTest

    运行消费测试类即可。

    当然消费和提供者肯定都是在一整个项目中的,一般我们会将公共部分抽取到Parent中,并在Parent中对版本进行统一的管理。这些在《  Maven的继承与聚合——多模块开发   》中都有详细步骤,这里就不再重复。

    四:Dubbo整合流行框架开发Web项目实现分布式开发样例

    1:建立多模块项目(这里只是一个演示,实际项目中会根据拆分情况进行建立项目)

    其中:student-demo为父项目

    student-api用于暴露接口,消费者消费的都是从这的

    student-service用于处理业务逻辑及调用数据访问层,返回相应数据

    student-web主要用于提供dubbo服务以及其他db,spring,SpringMVC,mybatis等配置。

    我也是根据晚上的教程学习了,很多,过两天我会把一个完整的Spring+Spring+Mybatis改成分布式的发布出来,也是对自己的一个任务

    五:Dubbo服务集群实现负载均衡

    当某个服务并发量特别大的时候,一个服务延迟太高,我们就需要进行服务集群,某个项目一天注册量10万,这个注册功能就必须要进行集群了,否则一个服务无法应付这么大的并发量;

    dubbo的服务集群很简单,只需要配置文件里改个端口即可,其他代码不需要动;

    企业级项目多个服务集群,每个服务都放不同机器,不仅能实现负载均衡,也能进行容错;就算一个机器挂了,其他机器可以继续服务;

    多个服务也提供权重设置,来动态设置请求分发量;

     

     

  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/nullering/p/9497456.html
Copyright © 2011-2022 走看看