1. 前言
Dubbo的相关资料:
dubbo官网: http://dubbo.apache.org dubbo github
源码地址:https://github.com/apache/incubator-dubbo dubbo
运维项目源码地址:https://github.com/apache/incubator-dubbo-ops
2 zookeeper安装
由于Kafka的运行依赖于Zookeeper
,所以在运行Kafka
之前需要安装并运行Zookeeper
2.1 下载zookeeper
Zookeeper下载路径:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.7/ 如上图所示。
2.2 安装并修改zoo.cfg配置文件
1.解压到文件下(我的目录是 D:\webserver\apache-zookeeper-3.5.7-bin),我习惯修改目录名称为:apache-zookeeper-3.5.7
2.打开D:\webserver\apache-zookeeper-3.5.7\conf,复制zoo_sample.cfg重命名成zoo.cfg
3.编辑zoo.cfg,修改dataDir为【dataDir=D:\webserver\apache-zookeeper-3.5.7\data】,
在D:\webserver\apache-zookeeper-3.5.7目录下创建data目录。
//zookeeper默认用的是8080端口,和tomcat的默认端口冲突,因此这个地方最好修改。
在文件的最后增加一行:admin.serverPort=8888
2.3 设置zookeeper环境变量
ZOOKEEPER_HOME D:\webserver\apache-zookeeper-3.5.7
Path 在现有的值后面添加 %ZOOKEEPER_HOME%\bin
如图所示:
2.4 验证安装是否成功
打开cmd,输入zkServer.cmd
,运行如下:
说明运行成功了。
3. 工程创建
集成之前我们先介绍一下目前结构:基本dubbo通信需要有客户端和服务端,服务端服务提供接口,客户端负责调用接口,同时,关于接口的定义及通讯数据结构需要实现定义。因此,我们需要创建三个项目:
- API接口:提供接口定义,数据结构定义
- 服务端:提供接口实现
- 客户端:去使用接口
3.1 创建父工程
在idea中,单击file》new》project,弹出下面对话框,左边选择maven,这里不要选择Create from archetype复选框。
如图所示操作;
如图所示操作;
完成父工程创建。
这个初始目录下有src目录,可以删除。
3.2 创建API 模块
在dubbopro工程上点击右键,选择new->Module…
选择new->Module… 输入group及Artifact,Artifact一般是工程名称,group一般是包路径名。
点击下一步
不用选择,直接Next,然后Finish,这样,接口工程就创建完毕。
3.3 创建dubbo-provider/dubbo-consumer 服务端/客户端
在dubbopro工程上点击右键,选择new->Module… 如图所示进行选择(和上一步不一样,这个是建立Springboot的工程):
next后,组的名称和工程的名称都需要修改,如下图:客户端名称为:dubbo-consumer,服务端名称为:dubbo-provider
Next,如图所示,需要打钩,开启热部署及lombok插件;
next后,选择左侧的web,然后右侧选择spring web 建立web工程:
点击Finish结束创建。
4. Springboot2.x 集成Dubbo
4.1 定义接口
首先在dubbo-api工程中定义通信的数据结构类,如下:
package com.ieslab.powergrid.dubboapi.model;
import java.io.Serializable;
public class TestDubboData implements Serializable {
String id;
String name;
String data;
Long time;
String des;
public TestDubboData() {
}
public TestDubboData(String id, String name, String data, Long time, String des) {
this.id = id;
this.name = name;
this.data = data;
this.time = time;
this.des = des;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
public Long getTime() {
return time;
}
public void setTime(Long time) {
this.time = time;
}
public String getDes() {
return des;
}
public void setDes(String des) {
this.des = des;
}
}
接口类TestDubboService.java:
package com.ieslab.powergrid.dubboapi.service;
import com.ieslab.powergrid.dubboapi.model.TestDubboData;
public interface TestDubboService{
TestDubboData TestDubboService(String uuid, String name);
}
这个接口很简单,传入两个参数,返回我们定义的数据结构。
如果跨语言通讯,数据结构可以用Google Protobuff进行定义,这样方便序列化和反序列化
4.2 Springboot2.x 集成Dubbo实现服务端
4.2.1 导入Dubbo依赖
下面是dubbo-provider的pom文件。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version