本篇大概算是dubbo和zookeeper一个非常入门的整合,目的是对dubbo和zookeeper有一个初步的认识!
zookeeper:分布式的远程服务注册中心。
dubbo:远程服务调度框架。
上面是对这两者一个非常简要的概括(可能不够准确),简单的单机部署步骤:
首先,为了方便服务消费者对提供者的调度,我们创建一个多moudle的项目(顺便也是对多moudle项目的一个初步认识):
1.创建父moudle,New Project,选择Spring initializr,并添加web模块:
2.创建成功后,删除src文件夹,并在pom.xml中添加packaging属性:
3.添加moudle,选择maven:
Parent选择你最初创建的父moudle:
其它moudle同上,最终项目结构为:
打开根目录下的pom.xml,发现moudle已经全部自动添加进去:
上面仅仅是比较简单的分模块划分例子:
common:一些共用的工具,或实现某些功能的第三方库;
dao:持久化层,可以是jpa或mybatis,用于操作数据库;
service:服务层;
web:项目启动模块,包含controller以及web页面、功能相关(当然,controller也可以提出来);
此时,这些模块之间并没有什么联系,如果需要关联,就需要创造依赖关系,该例子依赖关系为:
dao依赖common,service依赖dao,web依赖service:
dao下的pom.xml:
<dependencies>
<dependency>
<groupId>com.bloggroupId>
<artifactId>byl-commonartifactId>
<version>1.0.0version>
dependency>
dependencies>
service下的pom.xml:
<dependencies>
<dependency>
<groupId>com.bloggroupId>
<artifactId>byl-daoartifactId>
<version>1.0.0version>
dependency>
dependencies>
web下的pom.xml:
<dependencies>
<dependency>
<groupId>com.bloggroupId>
<artifactId>byl-serviceartifactId>
<version>1.0.0version>
dependency>
dependencies>
@SpringBootApplication(scanBasePackages = "com.blog")
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
scanBasePackages 一定不要忘了加,“com.blog”即groupId!
为了测试依赖关系是否正确,我们可以在common模块下创建一个Utils类,并在web模块下调用:
一般的,只要引用成功,说明已经没问题了,现在可以运行一下:
OK,运行成功,我们现在来部署zookeeper,本文中使用的zookeeper版本为3.4.14(最新版目前为3.6.2),下载链接:http://archive.apache.org/dist/zookeeper/
我们测试时,可以先部署到本地,本例在windows环境下:
1.解压压缩包:
2.打开conf文件夹,并复制一份zoo_sample.cfg重命名为zoo.cfg,并打开修改和添加:
dataDir=E:\zookeeper-3.4.14\data
dataLogDir=E:\zookeeper-3.4.14\log
路径均为zookeeper根目录,data和log文件夹自行创建!
3.进入bin目录,直接双击运行zkServer.cmd,启动zookeeper!(linux部署步骤基本一样)
zookeeper运行成功后,我们开始在项目中创建服务提供者,本例中service模块会作为服务提供者,而web模块则作为服务消费者(注意:项目中的common和dao基本没用,仅仅是为了测试多模块项目构建)!
打开根目录的pom.xml,添加dubbo和zookeeper相关依赖(因为本人也是初步使用,对doubbo和zookeeper的配置,网上的案例五花八门,各种版本,各种写法都有,真真的没一个管用…本例也是经过不少时间摸索,才成功运行):
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>2.7.8version>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubboartifactId>
<version>2.7.8version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-frameworkartifactId>
<version>4.2.0version>
dependency>
<dependency>
<groupId>org.apache.curatorgroupId>
<artifactId>curator-recipesartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>org.apache.zookeepergroupId>
<artifactId>zookeeperartifactId>
<version>3.4.14version>
dependency>
curator和zkclient都是zookeeper客户端,这里选用了curator,有些案例中既有curator又有zkclient,而且版本号五花八门,初学者很容易头晕!
进入service模块,先在resources文件夹下,创建配置文件application.properties,再在src文件夹下创建包及Service:
interface:
public interface TestProviderService {
String testProvider();
}
impl:
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@Component
@DubboService
public class TestProviderServiceImpl implements TestProviderService {
@Override
public String testProvider() {
return "我是服务提供者";
}
}
注意,必须用@DubboService注解,来注册Service!
此时,打开application.properties,配置dubbo:
(zookeeper上面已经安装并启动成功,服务地址即本地ip+端口号2181)
#dubbo应用名称(自定义)
dubbo.application.name=byl_blog_service
dubbo.registry.protocol=zookeeper
#zookeeper服务地址,本地IP:2181
dubbo.registry.address=zookeeper://192.168.1.95:2181
#固定/默认
dubbo.protocol.name=dubbo
#dubbo端口占用时可以修改
dubbo.protocol.port=20880
#需要扫描的远程服务所在的包名
dubbo.scan.base-packages=com.byl.service
为了避免与端口8080冲突,我们最好再配置一下服务端口号:
server.port=8081
创建启动类并启动服务提供者:
如果运行不报错,并出现下面log,则表示服务提供者运行成功(服务注册成功)!
此时,我们可以通过dubbo管理后台dubbo-admin去查看服务信息,大家可以自行下载一个dubbo-admin的war包,或者去官方gitbub上运行最新的dubbo-admin,本例中使用的是dubbo-admin-2.5.3.war!
下载成功后,部署到tomcat下:
启动tomcat,并打开浏览器输入:http://localhost:8080/dubbo-admin-2.5.3/
默认用户名和密码都为root,登录成功后:
输入我们创建的远程服务全路径:com.blog.service.TestProviderService,并搜索:
成功显示提供者:192.168.1.95:20880!
此时,打开web模块,也就是服务消费者,准备测试一下这个远程服务:
@RestController
@RequestMapping("/test")
public class TestController {
@DubboReference
TestProviderService testProviderService;
@GetMapping("/test")
public String test() {
String str = testProviderService.testProvider();
return str;
}
}
注意:必须用@DubboReference注解,引用该服务!
配置application.properties:
server.port=8082
dubbo.application.name=byl_blog_web
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://192.168.1.95:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
运行WebApplication,在浏览器输入:http://localhost:8082/test/test
成功调用!
需要注意的是,服务提供者一定要先运行,服务注册成功后,再运行服务消费者,另外,各端口号要注意不要冲突!
项目下载地址:https://download.csdn.net/download/baiyuliang2013/14945043