一: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:\Zookeeper】修改目录【D:\Zookeeper\zookeeper-3.4.12\zookeeper-3.4.12\conf】 下的【 zoo_sample.cfg 】文件为【zoo.cfg】

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

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

5:配置好后,将 Dubbo-admin的 war 包解压放到你给Dubbo配置的服务器的根目录下【D:\Tomact\apache-tomcat-8.0.53-dubbo\webapps\ROOT】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. </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的服务集群很简单,只需要配置文件里改个端口即可,其他代码不需要动;

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

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

Dubbo与Zookeeper在Window上的安装与简单使用的更多相关文章

  1. git在windows上的安装和简单使用

    git在windows上的安装和简单使用. 参考: https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E ...

  2. 超简教程:Xgboost在Window上的安装(免编译)

    Xboost在windows安装需要自己编译,编译的过程比较麻烦,而且需要复杂的软件环境.为了免去编译,我这里把编译好的文件上传到网盘供大家下载安装.有了编译好的文件,xgboost的安装变得超级简单 ...

  3. Zookeeper在linux上的安装

    1:进入 cd  /usr/local目录下 2:创建zookeeper目录  midir zookeeper 3:将压缩包复制到zookeeper目录下  cp /root/zookeeper/zo ...

  4. Redis在window上的安装

    1 Redis安装 Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)开发和维护着这个 Win64 的版本. 在github上面可以下 ...

  5. 版本管理之Git(二):Win7上Git安装及简单配置过程

    一.安装包 msysgit(Windows版本的Git) 下载地址:http://code.google.com/p/msysgit/downloads/list?q=full+installer+o ...

  6. redis在Linux上的安装和简单使用

    一.官方文档介绍方式 这里演示的版本是Redis4.0.6,Linux系统是CentOS6.7,Jdk1.7,Jedis2.8.1 下载,解压,编译: $ wget http://download.r ...

  7. Linux上Redis安装和简单操作

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  8. nc在centos7上的安装和简单使用

    下载 http://vault.centos.org/6.6/os/x86_64/Packages/nc-1.84-22.el6.x86_64.rpm     rpm -iUv nc-1.84-22. ...

  9. NASM在Ubuntu上的安装与简单使用

    一 .安装NASM 1. 下载安装文件 地址是:http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/ 2.解压(具体命令要根据压缩包的类型来选用) 3. ...

随机推荐

  1. getRealPath函数编译报错问题

    ServletActionContext.getRequest().getRealPath("");函数虽然已被淘汰,但在获取服务器绝对路径时仍有使用.关于 ServletActi ...

  2. 关于excel中的查找

    弹出查找界面后,点击“选项”按钮 在范围下拉框中选择: 1.工作表:表示在当前表sheet中进行查找 2.工作簿:表示在此excel整个文件中进行查找

  3. 始终使用属性(Property),而不是字段(Data Member)

    1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...

  4. Git永久删除文件和历史记录

    目录 Git永久删除文件和历史记录 使用filter-branch 添加到.gitignore文件里并push修改后的repo 清理和回收空间 Git永久删除文件和历史记录 造成你想从git存储库中永 ...

  5. Django框架的使用教程--站点的管理[七]

    Django的站点管理 创建超级管理员命令(密码要8位) python manage.py createsuperuser 进入站点管理 注册模型类 from django.contrib impor ...

  6. 17秋 软件工程 团队第五次作业 Alpha Scrum7

    17秋 软件工程 团队第五次作业 Alpha Scrum7 今日完成的任务 世强:部员详情列表的编写与数据交互,完善APP通知模块: 港晨:完成前端登陆界面编写: 树民:完善Web后端数据库访问模块: ...

  7. Linter pylint is not installed

    问题 Linter 'pylint' is not installed. Please install it or select another linter". Error: Module ...

  8. NET Framework 各版本官方下载

    https://msdn.microsoft.com/en-us/library/5a4x27ek(v=vs.110).aspx https://www.microsoft.com/zh-CN/dow ...

  9. luogu P5151 HKE与他的小朋友

    嘟嘟嘟 看到\(i\)变成了\(A_i\),我突然想起了置换这个东西.于是马上到网上学了一遍轮换乘法. 手模后发现轮换乘法满足结合律,但不满足交换律. 于是就可以快速幂啦. 需要注意的是每一次相乘是\ ...

  10. 如何正確的使用 Runtime.exec()

    或許大部分有寫過Java程式的人都知道java.lang.Runtime這個class有一個method叫做exec(),可以被用來呼叫(調用)外部的程式.然而大部分的人都不知道這個method存在著 ...