前言

Dubbo是阿里开源的一个分布式服务框架,但是阿里内部用的却是HSF(High-speed Service Framework)。下面看看怎么使用吧。

Zookeeper

Dubbo是个RPC调用框架,本质上不需要依赖中间件就可以完成点对点的通信,但是实际生产环境中,在动态扩容和下线等情况下,服务提供者和消费者的地址不可能是一直固定的,所以需要一个固定的第三方让双方暴露服务和发现服务,这也就是注册中心的存在意义,Dubbo官方推荐ZooKeeper。下面在windows下单机部署ZooKeeper作为演示。

1.官网下载ZooKeeper,地址 http://zookeeper.apache.org/

2.解压后在conf路径下将zoo_sample.cfg改成zoo.cfg,默认数据文件会存放在C:\tmp\zookeeper,端口号是2181

3.在bin路径下,双击zkServer.cmd,正常会出现下面

binding to port 0.0.0.0/0.0.0.0:2181

4.运行zkCli.cmd,正常会出现下面

WatchedEvent state:SyncConnected type:None path:null

Dubbo

Dubbo内部封装了注册,心跳,RPC调用等复杂逻辑,所以使用上非常简单,只需要配置一下注册中心地址和相关的服务提供即可完成。下面是完成服务提供和消费所需要改动的文件

api模块负责向其他系统提供接口和模块,作为一个jar包分发出去,所以在这里只需要定义一个facade接口,如

public interface TestFacade {
String getDeptName(String id);
}

api接口的实现在biz模块中,而DeptServiceImpl文件中,需要将sal模块中定义的bean导入

public class TestFacadeImpl implements TestFacade {
@Override
public String getDeptName(String id) {
return "部门名称:"+id;
}
}
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
DeptDOMapper deptDOMapper;
@Autowired
TestClient testClient;
@Override
public List<DeptInfo> listDeptInfo(String name) { System.out.println(testClient.getDeptName("123")); List<DeptDO> deptDOList = deptDOMapper.listDept(name);
List<DeptInfo> deptInfos = new ArrayList<>();
deptDOList.stream().forEach(x -> {
DeptInfo info = new DeptInfo();
info.setName(x.getName());
info.setId(x.getId());
deptInfos.add(info);
}); }
}

DeptServiceImpl.java

sal负责调用其他应用的服务,处理相应数据,然后再给biz模块提供相应的服务,通常没有复杂的逻辑都是直接透传的,如

public interface TestClient {
String getDeptName(String id) ;
}
@Service
public class TestClientImpl implements TestClient { @Autowired
TestFacade testFacade;
@Override
public String getDeptName(String id) {
return testFacade.getDeptName(id);
}
}

另外还要在web模块配置Dubbo和依赖

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<!--<dubbo:application name="consumer-of-test-app" />--> <!-- 使用zookeeper注册中心 -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper"/> <!-- 生成远程服务代理,可以和本地bean一样使用 -->
<dubbo:reference id="testFacade" check="false" interface="cn.com.test.springmvc.api.TestFacade" />
</beans>

consumer.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="test-app" /> <!-- 使用zookeeper注册中心 -->
<dubbo:registry address="127.0.0.1:2181" protocol="zookeeper" /> <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="cn.com.test.springmvc.api.TestFacade" ref="testFacadeImpl" /> <!-- 和本地bean一样实现服务 -->
<bean id="testFacadeImpl" class="cn.com.test.springmvc.biz.apiimpl.TestFacadeImpl" />
</beans>

provider.xml

applicationContext.xml中加入引用资源
   <import resource="provider.xml"></import>
<import resource="consumer.xml"></import>

pom.xml加入依赖

       <dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.6</version>
</dependency> <dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency> <dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>

测试

这里一切从简就不拆成两个应用了,一个应用充当服务者和消费者两个角色,先运行zkServer.cmd,再运行应用,在浏览器输入例如这样的链接http://localhost:8080/dept/getList?name=1,会看控制台看到输出,如

部门名称:123

调用成功。

Dubbo官方文档  http://dubbo.apache.org/zh-cn/docs/user/preface/background.html

ZooKeeper和Dubbo的更多相关文章

  1. 通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件

    现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc ...

  2. SpringMVC、Zookeeper、Dubbo使用

    联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使前 ...

  3. 基于Nginx和Zookeeper实现Dubbo的分布式服务

    一.前言 公司的项目基于阿里的Dubbo 微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现 Dubb ...

  4. zookeeper在dubbo中干什么

    本文旨在表述出自己对于zookeeper在dubbo的作用的初步理解 在对dubbo进行了初步的探索后,对于zookeeper在其中的作用不甚了解,因为本身对zookeeper就没有一个特别具体的概念 ...

  5. zookeeper在Dubbo中扮演了一个什么角色

    作者:guxiangfly链接:https://www.zhihu.com/question/25070185/answer/188238271来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  6. ZooKeeper系列(10):ZooKeeper与Dubbo的结合

    1. Dubbo的快速讲解 以防有人对Dubbo不了解,快速过一下Dubbo的基本概念,下面简单引用一下官方的介绍 1.1 架构 1.2.角色说明 Provider:暴露服务的提供方 Consumer ...

  7. zookeeper和dubbo的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

  8. zookeeper和dubbo的关系[转]

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

  9. 170414、zookeeper和dubbo的关系

    Dubbo建议使用Zookeeper作为服务的注册中心. 1.   Zookeeper的作用:         zookeeper用来注册服务和进行负载均衡,哪一个服务由哪一个机器来提供必需让调用者知 ...

随机推荐

  1. The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567

    地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...

  2. python 利用正则构建一个计算器

    该计算器主要分为四个模块: weclome_func函数用来进入界面获取表达式,并判断表达式是否正确,然后返回表达式: add_sub函数用来进行加减运算,如果有多个加减运算,会递归,最后返回对应的值 ...

  3. nginx添加sticky cookie 分流模块

    需要下载nginx源码和sticky,在nginx配置文件中添加sticky模块,然后重新编译nginx. #准备安装基础环境:yum install gcc openssl-devel pcre-d ...

  4. JS正则表达式从入门到入土(9)—— test方法以及它的那些坑

    test方法 test方法介绍 RegExp.prototype.test(str) test方法用于测试字符串参数中是否存在匹配正则表达式模式的字符串 test方法的使用 let reg = /\w ...

  5. 【VS Error】VS2008在编译时出现:Error 15 Cannot register assembly

    现象: 在visual studio 2008在编译类库时提示如下错误: Error 15 Cannot register assembly "D:\01_Work\02_SVN\OCRpl ...

  6. CSS Margin(外边距)

    CSS Margin(外边距) 一.简介 CSS margin(外边距)属性定义元素周围的空间. margin 清除周围的(外边框)元素区域.margin 没有背景颜色,是完全透明的. margin ...

  7. 关于git pull时出现的问题及解决反思

    前因 在前面由于已经git过一次,按照娄老师的要求,代码一个一个commit,所以删掉之前的git仓库(用la查看,使用rm -rf .git删除).但远程origin已经存在,所以执行git rem ...

  8. 20145335郝昊《java程序设计》第8周学习总结

    20145335郝昊 <Java程序设计>第8周学习总结 教材学习内容总结 第14章 NIO与NIO2 NIO简介 NIO使用频道来衔接数据结点,在处理数据时,NIO可以让你设定缓冲区容量 ...

  9. String中的equals方法解析 jdk1.7

    注  此篇为jdk1.7中的源码解析 equals()方法中的判断分一下步骤 1先判断内存地址是否相同  如果内存地址相同 那么字符串就是相同的 返回true 2 判断当前字符串和参数字是否属于同一类 ...

  10. Graph_Master(连通分量_E_Hungry+Tarjan)

    hdu_4685 终于来写了这题的解题报告,没有在昨天A出来有点遗憾,不得不说数组开大开小真的是阻碍人类进步的一大天坑. 题目大意:给出n个王子,m个公主,只要王子喜欢,公主就得嫁(这个王子当得好霸道 ...