Dubbo集成Spring与Zookeeper实例
使用Dubbo结合Zookeeper和Spring,
是使用比较广泛的一种组合,下面参考官方文档,做个简单的示例,一步步搭建一个使用dubbo结合Zookeeper和Spring的Demo工程。
代码已经上传到github,地址:https://github.com/bingyue/dubbodemo
1.集成Zookeeper
(1)安装Zookeeper
(2)启动Zookeeper服务
2.配置Dubbo的管理界面
Dubbo官方提供了几个管理工具,包括管理控制台dubbo-admin及简易监控中心等。
这里的Demo学习使用了最新的稳定的2.5.3版本。
官网指出在阿里巴巴内部广泛使用的GA版本为2.4.9,并且推荐此版本,
在实际项目中可以使用这一稳定版本。
(1)下载dubbo-admin,修改相关的配置
下载地址http://dubbo.io/Download-zh.htm,下载后解压war包,
找到dubbo.properties配置文件,修改其中的zookeeper地址为上面部署的zk地址。
(2)启动dubbo-admin工程
把工程文件夹放在Tomcat的工程目录下,启动后登录即可。
3.创建Demo项目,集成Spring
Demo项目主要是使用了CXF整合Spring创建WebService的技术,关于CXF可以参考:
WebService CXF学习(高级篇1):整合Spring框架
(1)创建服务提供接口项目
服务端接口需要单独打包,服务提供方和消费方共享,同时被提供端和消费端依赖。
1.新建Maven项目
创建dubbo-demo-api工程,pom文件如下:
<groupId>dubbo-demo</groupId>
<artifactId>dubbo-demo-api</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<name>dubbo-demo-api</name>
2.编写服务接口
public interface TestService {
public String sayHello(String name);
}
(2)创建项目实现接口
1.创建具体接口实现项目
public class TestServiceImpl implements TestService {
/**
* 服务提供方实现接口:(对服务消费方隐藏实现)
*/
public String sayHello(String name) {
System.out.println("调用provider服务");
return "hello"+name;
}
}
添加api的依赖,添加Spring、dubbo和zookeeper的依赖,pom文件如下:
<groupId>dubbo-demo</groupId>
<artifactId>dubbo-demo-provider</artifactId>
<version>0.1</version>
<packaging>jar</packaging> <name>dubbo-demo-provider</name> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加Dubbo服务接口的依赖 -->
<dependency>
<groupId>dubbo-demo</groupId>
<artifactId>dubbo-demo-api</artifactId>
<version>0.1</version>
</dependency>
<!-- 添加Spring context依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.context</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<!-- 引入Dubbo依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
<!-- zookeeper客户端 zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
2.暴露服务,整合Spring完成服务提供者
配置provider.xml:
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dubbo-demo-provider" />
<!-- 使用multicast广播注册中心暴露服务地址 -->
<dubbo:registry address="multicast://192.168.106.129:2182" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="bingyue.dubbo.provider.TestService" ref="testService" />
<!-- 和本地bean一样实现服务 -->
<bean id="testService" class="bingyue.dubbo.provider.TestServiceImpl" />
(3)创建服务消费端项目
1.创建项目和相关配置
在pom.xml中依赖接口项目:
<groupId>dubbo-demo</groupId>
<artifactId>dubbo-demo-consumer</artifactId>
<version>0.1</version>
<packaging>jar</packaging> <dependencies>
<!-- 添加Spring context依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.context</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 添加Dubbo服务接口的依赖 -->
<dependency>
<groupId>dubbo-demo</groupId>
<artifactId>dubbo-demo-api</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
配置consumer.xml:
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="dubbo-demo-consumer" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
<dubbo:registry address="multicast://192.168.106.129:2182" /> <!-- 把接口的声明引入到本项目中,通过jar或者maven依赖都可以 -->
<!-- 生成远程服务代理,可以和使用本地bean一样使用服务者提供的服务 -->
<dubbo:reference id="testService" interface="bingyue.dubbo.provider.TestService" />
2.配置和启动消费者服务
加载配置文件后,消费端调用服务端接口的方式有多种,可以从上下文中获取bean,也可以使用注解。
public class Tester {
//使用注解或者使用远程服务代理取得接口实例
// @Autowired TestService testService;
public static void main(String[] args){
//加载同级目录下的消费者配置文件
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("consumer.xml");
ctx.start();
TestService testService = (TestService) ctx.getBean("testService");
String result=testService.sayHello("cnblogs");
System.out.println(result);
}
}
3.使用Maven结合Dubbo
这种Dubbo使用方式可以不用考虑Maven如何单独对接口打包,
在顶层的服务提供方项目中编写接口,
消费端项目会依赖服务提供方项目的jar包,从中获得接口实例,
然后在服务方项目中新建单独的子项目去编写接口的实现类,
这样通过Maven的继承,将消费端项目和具体的接口实现类代码分离开。
Dubbo集成Spring与Zookeeper实例的更多相关文章
- 如何使用Dubbo服务和集成Spring
Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个 ...
- 集成Dubbo服务(Spring)
Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo[]是 ...
- dubbo集成zookeeper rpc远程调用
注:下面使用dubbo依赖的是zookeeper注册中心,这里没有详细的介绍.在配置之前,请自行准备好zookeeper环境. 后续如果写zookeeper的配置会补放链接 添加Gradle依赖 co ...
- SpringBoot+Dubbo+Zookeeper 实例
前言 当下Java 生态环境里面,微服务占据了非常大的份额,现在大部分新开发的 Java选型的后台程序都很奇妙的会跟微服务发生一些关系.那目前市面上主流的微服务方向主要有 Spring 家族推出的Sp ...
- Spring Cloud ZooKeeper集成Feign的坑2,服务调用了一次后第二次调用就变成了500,错误:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.n
错误如下: 2017-09-19 15:05:24.659 INFO 9986 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refre ...
- Dubbo和Spring Cloud微服务架构'
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- Dubbo和Spring Cloud微服务架构比较
Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...
- 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
转自:https://baijiahao.baidu.com/s?id=1600174787011483381&wfr=spider&for=pc 微服务架构是互联网很热门的话题,是互 ...
随机推荐
- 移动端压缩并ajax上传图片解决方案
1.需求 做一个前端可压缩并且上传图片到后台的功能 2.使用组件 用到的主要是jq和LocalResizeIMG这2个库 3.使用方法 a.引入脚本文件 <script type='text/j ...
- jq常用的方法
.eq(i) //获取第几个元素 .text() //获取或设置元素文本内容 .html() //获取或设置元素html代码内容 .val() //获取或设置表单元素值 .attr() //获取或设置 ...
- Sqli-LABS通关笔录-14
这一节让我学习到了 1.extractvalue函数(该函数用于对xml文件进行查询和修改,于此相关的还有一个叫“updatexml”函数) 语法:extractvalue(XML_document, ...
- Ubuntu 中安装 NetBeans IDE
NetBeans 8.2 刚刚发布,如果你还没有安装的话,这篇简短的教程将会演示如何在 Ubuntu 系统上快速的安装.对安装 NetBeans 需要帮助的开发者来说,这往篇文章会是不错的指导. 给那 ...
- 思科 vlan 相关操作
添加或者修改VLAN Switch(config)# vlan vlan-id Switch(config-vlan)# name vlan-name 删除VLAN Switch(config)# n ...
- django xadmin 模板的定制
编辑新增等页面对应的modelform为ModelFormAdminView (xadmin.views.edit.ModelFormAdminView) 通过源码分析,新增对象的template属性 ...
- iOS 中 为UIView添加背景图片
创建UIImage的方法有两种: UIImage *image = [UIImageimageNamed:@"image.jpg"];//这种不释放内存,要缓存 NSString ...
- 使用Axis2编写webservice客户端,服务端
1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...
- [转载]能不能同时用static和const修饰类的成员函数?
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...
- 【leetcode】Merge k Sorted Lists
Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...