一: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-ionic-安装及第一个app

    一,下载ionic v1.0.1版本,下载地址为:ionic-v1.0.1.zip. ionic 最新版本下载地址:http://ionicframework.com/docs/overview/#d ...

  2. mybatis 中between and用法

    今天遇到一个问题,半天没看出来问题,特意记录一下 Dao ConfigEvaluation findConfigEvaluationByEvalpecent(BigDecimal evalPercen ...

  3. 我的Java之旅 第二课 Eclipse使用

    1.项目引用的jar包管理 在Project Explorer中找到你要添加jar包的项目,右键项目名,点击Properties. 在弹出的窗体中,点击Resource中的JAVA Build Pat ...

  4. “一切都是消息”--iMSF(即时消息服务框架)之【请求-响应】模式(点对点)

    MSF的名字是 Message Service Framework 的简称,由于目前框架主要功能在于处理即时(immediately)消息,所以iMSF就是 immediately Message S ...

  5. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  6. CSS| 框模型-定位及相關屬性

    CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多 ...

  7. django静态文件

    django静态文件(js脚本.CSS.图片等) 默认统一放在每一个app的static文件夹下, 通过收集静态文件命令,自动将每一个app下static文件夹下的文件复制到根目录的static文件夹 ...

  8. 转:SQL Server中服务器角色和数据库角色权限详解

    当几个用户需要在某个特定的数据库中执行类似的动作时(这里没有相应的Windows用户组),就可以向该数据库中添加一个角色(role).数据库角色指定了可以访问相同数据库对象的一组数据库用户. 数据库角 ...

  9. fedora输入法

    fedora自带输入法,另外如果自己鼓捣的话很可能身心俱疲. 打开设置(在桌面右击也能打开) 区域和语言 在输入源中添加 汉语(中国) 快捷键 输入源切换:win+space 中英文切换:shift

  10. python基础、字符串和if条件语句,while循环,跳出循环、结束循环

    一:Python基础 1.文件后缀名: .py 2.Python2中读中文要在文件头写: -*-coding:utf8-*- 3.input用法      n为变量,代指某一变化的值 n = inpu ...