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:\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上的安装与简单使用的更多相关文章
- 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 ...
- 超简教程:Xgboost在Window上的安装(免编译)
Xboost在windows安装需要自己编译,编译的过程比较麻烦,而且需要复杂的软件环境.为了免去编译,我这里把编译好的文件上传到网盘供大家下载安装.有了编译好的文件,xgboost的安装变得超级简单 ...
- Zookeeper在linux上的安装
1:进入 cd /usr/local目录下 2:创建zookeeper目录 midir zookeeper 3:将压缩包复制到zookeeper目录下 cp /root/zookeeper/zo ...
- Redis在window上的安装
1 Redis安装 Redis 没有官方的Windows版本,但是微软开源技术团队(Microsoft Open Tech group)开发和维护着这个 Win64 的版本. 在github上面可以下 ...
- 版本管理之Git(二):Win7上Git安装及简单配置过程
一.安装包 msysgit(Windows版本的Git) 下载地址:http://code.google.com/p/msysgit/downloads/list?q=full+installer+o ...
- redis在Linux上的安装和简单使用
一.官方文档介绍方式 这里演示的版本是Redis4.0.6,Linux系统是CentOS6.7,Jdk1.7,Jedis2.8.1 下载,解压,编译: $ wget http://download.r ...
- Linux上Redis安装和简单操作
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- 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. ...
- NASM在Ubuntu上的安装与简单使用
一 .安装NASM 1. 下载安装文件 地址是:http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/ 2.解压(具体命令要根据压缩包的类型来选用) 3. ...
随机推荐
- getRealPath函数编译报错问题
ServletActionContext.getRequest().getRealPath("");函数虽然已被淘汰,但在获取服务器绝对路径时仍有使用.关于 ServletActi ...
- 关于excel中的查找
弹出查找界面后,点击“选项”按钮 在范围下拉框中选择: 1.工作表:表示在当前表sheet中进行查找 2.工作簿:表示在此excel整个文件中进行查找
- 始终使用属性(Property),而不是字段(Data Member)
1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...
- Git永久删除文件和历史记录
目录 Git永久删除文件和历史记录 使用filter-branch 添加到.gitignore文件里并push修改后的repo 清理和回收空间 Git永久删除文件和历史记录 造成你想从git存储库中永 ...
- Django框架的使用教程--站点的管理[七]
Django的站点管理 创建超级管理员命令(密码要8位) python manage.py createsuperuser 进入站点管理 注册模型类 from django.contrib impor ...
- 17秋 软件工程 团队第五次作业 Alpha Scrum7
17秋 软件工程 团队第五次作业 Alpha Scrum7 今日完成的任务 世强:部员详情列表的编写与数据交互,完善APP通知模块: 港晨:完成前端登陆界面编写: 树民:完善Web后端数据库访问模块: ...
- Linter pylint is not installed
问题 Linter 'pylint' is not installed. Please install it or select another linter". Error: Module ...
- NET Framework 各版本官方下载
https://msdn.microsoft.com/en-us/library/5a4x27ek(v=vs.110).aspx https://www.microsoft.com/zh-CN/dow ...
- luogu P5151 HKE与他的小朋友
嘟嘟嘟 看到\(i\)变成了\(A_i\),我突然想起了置换这个东西.于是马上到网上学了一遍轮换乘法. 手模后发现轮换乘法满足结合律,但不满足交换律. 于是就可以快速幂啦. 需要注意的是每一次相乘是\ ...
- 如何正確的使用 Runtime.exec()
或許大部分有寫過Java程式的人都知道java.lang.Runtime這個class有一個method叫做exec(),可以被用來呼叫(調用)外部的程式.然而大部分的人都不知道這個method存在著 ...