构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目

来源:互联网 发布:设计模式 知乎 编辑:程序博客网 时间:2024/06/07 19:12
今天给大家介绍一下如何在SpringBoot中搭建Dubbo+Zookeeper来实现不同系统的RPC调用
这里先和大家说一下什么是RPC框架,简单的来说就是远程接口调用框架。像这类的框架有很多,例如:新浪研发的Motan,还有阿里研发的Dubbo等等之类的。如果大家想要了解更多可以看这篇博客介绍,里面对于框架的对比写的特别不错。
博客地址:http://blog.csdn.net/liubenlong007/article/details/54692241
经过考虑,我决定采用Dubbo+Zookeeper来实现RPC调用框架的实现。
一:首先确定一下工具的版本和运行的环境:
运行环境:JDK 7 或 8,Maven 3.0+
技术栈:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+
其中SpringBoot ,Dubbo 只要在Maven中配置就可以自动下载jar了,ZooKeeper 需要独立加载软件并运行才可以。
二:接下来先介绍的一下Zookeeper的安装和使用步骤:
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
第一步:需要到官网下载ZooKeeper 3.3+的软件
ZooKeeper下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper
第二步:下载完毕之后就需要做一些简单的配置了,配置过程如下:
在 conf 目录新建 zoo.cfg ,照着该目录的 zoo_sample.cfg 配置如下。
# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/tmp/zookeeper# the port at which the clients will connectclientPort=2181
第三步:在 bin 目录下,启动 ZooKeeper
这样关于ZooKeeper安装和使用就基本结束了,接下来是SpringBoot如何配置Dubbo和Zookeeper了。
四:SpringBoot项目构建模块
首先新建一个SpringBoot项目,来作为Dubbo的客户端请求服务。
首先需要在pom.xml加入相应的jar关联:
<!-- Spring Boot Dubbo 依赖 --><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>${dubbo-spring-boot}</version></dependency>
这里还需要额外的添加log4j关联,否则项目会启动报错(具体的原因我也不知道)
<!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency>
接下来就是application.properties配置文件中关于Dubbo信息的配置了,配置内容如下所示:
## tomcat端口号配置server.port=8001## 项目访问路径配置server.context-path=/bootTest## Dubbo 应用名称spring.dubbo.application.name=consumer##Dubbo 注册中心地址spring.dubbo.registry.address=zookeeper://127.0.0.1:2181## Dubbo 服务类包目录(service所在包的地址,这个千万不要配置错误)spring.dubbo.scan=lzq.boot.test.service
接下来就是写功能代码主要有:接口,接口实现类,实体类,控制类,项目启动类
1实体类:
package lzq.boot.test.entity;import java.io.Serializable;/** * 返回结果实体类 * @author linzhiqiang * */public class ResultInfo implements Serializable{    private static final long serialVersionUID = -1L;private String resultInfo;public ResultInfo(String resultInfo) {super();this.resultInfo = resultInfo;}public ResultInfo() {super();}public String getResultInfo() {return resultInfo;}public void setResultInfo(String resultInfo) {this.resultInfo = resultInfo;};}
2.接口:
package lzq.boot.test.service;/** * RPC调用接口 * @author linzhiqiang * */import lzq.boot.test.entity.ResultInfo;public interface RPCInterface {/** * 通过Dubbo实现远程RPC调用接口信息 * @return */public ResultInfo getRPCInfo();}
3.接口实现类:
package lzq.boot.test.service.impl;import org.springframework.stereotype.Component;import com.alibaba.dubbo.config.annotation.Reference;import lzq.boot.test.entity.ResultInfo;import lzq.boot.test.service.RPCInterface;/** * RPC调用业务逻辑处理 * @author linzhiqiang */@Componentpublic class RPCInterfaceImpl implements RPCInterface {    @Reference(version = "1.0.0")    RPCInterface rpcInterface;//调用远程接口的实现类    @Overridepublic ResultInfo getRPCInfo() {ResultInfo resultInfo=rpcInterface.getRPCInfo();return resultInfo;}}
4.控制类:
package lzq.boot.test.controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import lzq.boot.test.entity.ResultInfo;import lzq.boot.test.service.RPCInterface;/** * Dubbo测试 * @author linzhiqiang * */@Controllerpublic class DubboController {@Autowiredprivate RPCInterface rpcInterface;@RequestMapping("/dubbo")@ResponseBodypublic String errorNginxTest(){ResultInfo resultInfo=rpcInterface.getRPCInfo();return "result:"+resultInfo.getResultInfo();}}
5.项目启动类:
package lzq.boot.test;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootTest1Application {public static void main(String[] args) {SpringApplication.run(SpringBootTest1Application.class, args);}}
最后就是新建一个SpringBoot项目,来作为Dubbo的服务端用来返回请求信息
该项目和客户端项目基本差不多也是先在pom.xml 进行maven的配置
在pom.xml加入相应的jar关联:
<!-- Spring Boot Dubbo 依赖 --><dependency><groupId>io.dubbo.springboot</groupId><artifactId>spring-boot-starter-dubbo</artifactId><version>${dubbo-spring-boot}</version></dependency>
这里还是需要额外的添加log4j关联,否则项目会启动报错(具体的原因我也不知道)
<!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.14</version></dependency>
接下来还是application.properties配置文件中关于Dubbo信息的配置了,配置内容如下所示:
## tomcat端口号配置server.port=8002## 项目访问路径配置server.context-path=/bootTest## Dubbo 应用名称spring.dubbo.application.name=provider##Dubbo 注册中心地址spring.dubbo.registry.address=zookeeper://127.0.0.1:2181##Dubbo 协议名称spring.dubbo.protocol.name=dubbo##Dubbo 协议端口spring.dubbo.protocol.port=20880## Dubbo 服务类包目录(service所在包的地址,这个千万不要配置错误)spring.dubbo.scan=lzq.boot.test.service
接下来还是写功能代码主要有:接口,接口实现类,实体类,项目启动类
1实体类:
package lzq.boot.test.entity;import java.io.Serializable;/** * 返回结果实体类 * @author linzhiqiang * */public class ResultInfo implements Serializable{    private static final long serialVersionUID = -1L;private String resultInfo;public ResultInfo(String resultInfo) {super();this.resultInfo = resultInfo;}public ResultInfo() {super();}public String getResultInfo() {return resultInfo;}public void setResultInfo(String resultInfo) {this.resultInfo = resultInfo;};}
2.接口:
package lzq.boot.test.service;/** * RPC调用接口 * @author linzhiqiang * */import lzq.boot.test.entity.ResultInfo;public interface RPCInterface {/** * 通过Dubbo实现远程RPC调用接口信息 * @return */public ResultInfo getRPCInfo();}
3.接口实现类:
package lzq.boot.test.service.impl;import com.alibaba.dubbo.config.annotation.Service;import lzq.boot.test.entity.ResultInfo;import lzq.boot.test.service.RPCInterface;/** * RPC接口的实现类 * @author linzhiqiang *///注册为 Dubbo 服务@Service(version = "1.0.0")public class RPCInterfaceImpl implements RPCInterface {@Overridepublic ResultInfo getRPCInfo() {ResultInfo resultInfo=new ResultInfo("我是RPC的返回信息,来自其它系统的实现方法");return resultInfo;}}
4.项目启动类:
package lzq.boot.test;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringBootTest2Application {public static void main(String[] args) {SpringApplication.run(SpringBootTest2Application.class, args);}}
启动dubbo的服务端的SpringBoot项目时候,显示以下信息就代表注册成功了。
之后就可以启动dubbo客户端的SpringBoot项目了,在浏览器中访问控制器校验接口是否正确。
下面是校验结果显示截图:
到这里关于构建 Zookeeper + Dubbo + Spring Boot 的分布式调用项目就基本结束了
如果对上面的内容还有什么疑义或者问题都可以加我QQ:208017534咨询。
想要源代码的童鞋也可以加我QQ找我要!!!
参考文献http://www.cnblogs.com/Alandre/p/6490142.html
阅读全文
2 0
原创粉丝点击