一: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加入依赖:

 <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.35.Final</version>
</dependency>
</dependencies>

pom.xml

然后定义一个服务接口: 

 package com.xqc.service;

 /**
* 服务提供者接口
*
*/
public interface DemoProviderService { public String sayHello(String name);
}

DemoProviderService

再定义实现类

 package com.xqc.service.impl;

 import com.xqc.service.DemoProviderService;

 /**
* 服务提供者接口实现类
*
*/
public class DemoProviderServiceImpl implements DemoProviderService{ public String sayHello(String name) {
return "服务 1 ";
} }

DemoProviderServiceImpl

配置Dubbo的配置文件

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

编写测试类:

 import java.io.IOException;

 import org.springframework.context.support.ClassPathXmlApplicationContext;

 public class ProviderTest {

     public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-demo-provider.xml"});
context.start();
System.out.println("服务提供者注册成功(端口:20880)");
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.close();
}
}

ProviderTest

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

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

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

4:消费Dubbo服务:

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

创建maven项目 dubbo-demo-consumer

pom.xml配置下:

 <dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.35.Final</version>
</dependency>
</dependencies>

pom.xml

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

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

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

 package com.xqc.service;

 /**
* 服务提供者接口
*
*/
public interface DemoProviderService { public String sayHello(String name);
}

DemoProviderService

编写测试类

 import java.io.IOException;

 import org.springframework.context.support.ClassPathXmlApplicationContext;

 import com.xqc.service.DemoProviderService;

 public class ConsumerTest {

     public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo-demo-consumer.xml"});
context.start();
DemoProviderService demoProviderService=(DemoProviderService) context.getBean("demoProviderService");
String result=demoProviderService.sayHello("你好");
System.out.println("远程调用结果:"+result);
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
context.close();
}
}

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. 谈谈web上各种图片应用的优缺点

    web中承载信息的主要方式就是图片与文字了,以下就是对一些web图片格式的优缺点进行归纳. 1.GIF GIF图是比较古老的web图片格式之一,可以追溯到1987,几乎所有的浏览器都支持这一种格式,老 ...

  2. tfs 禁止多人签出

    好久没用tfs了,忘了怎么设置了,记录下 编辑----->高级

  3. 机器学习算法(SVM)公开课4月25日开讲

    从深蓝到AlphaGo,聪明的人工智能一再“羞辱”人类大脑: 指纹识别.以图搜图.语音助手.无人驾驶···生活里它无孔不入 离不开智能手机的我们,是否已开始被人工智能的“奴役”? 或许,你不需要会运用 ...

  4. MySQL高可用方案--MHA部署及故障转移

    架构设计及必要配置 主机环境 IP                 主机名             担任角色 192.168.192.128  node_master    MySQL-Master| ...

  5. Python之逻辑回归

    代码: import numpy as np from sklearn import datasets from sklearn.linear_model import LogisticRegress ...

  6. tkinter做一个简单的登陆页面(十六)

    做一个简单的登陆页面 import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry("900x3 ...

  7. 洗礼灵魂,修炼python(58)--爬虫篇—【转载】urllib3模块

    urllib3 1.简介 urllib3相比urllib,urlib2,又有些一些新的功能,可以实现很多东西,而这个模块有点特殊的是,并且还可以同时存在于python2和python3,但说实话,用的 ...

  8. Linux下内存查看命令

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  9. Django框架的使用教程--Cookie-Session[五]

    Cookie cookie是存储在浏览器中的一段文本信息,下次同一网站请求,就会发送该cookie给服务器,一般的浏览器都有启动cookie,用cookie存储信息,最好不要存储密码,cookie也有 ...

  10. VMWare:vSphere6 企业版参考序列号

    HV4WC-01087-1ZJ48-031XP-9A843 NF0F3-402E3-MZR80-083QP-3CKM2 4F6FX-2W197-8ZKZ9-Y31ZM-1C3LZ JZ2E9-6D2D ...