学习快乐吗??!!这居然也能成为一个问题,明确答复:学习不快乐,还不如来一场Dota、一局王者欢乐,那还为啥学习啊,因为我想进步!让人进步的往往是痛苦的,纵观人类史,也成立。
现在的项目打包,一种是war,一种是jar,区别在哪?war包我想大家不陌生,代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,放到容器比如三脚猫(tomcat)中,就能自解压运行,jar只是一个压缩归档文件,一些编译好的class文件和一些描述文件,运行有JRE环境即可,今天来玩一把Gradle打包,看似简单,还是有点上头的感觉。
目标:实现consumer从zk获取服务列表;使用zkClient获取某个服务的列表 ;能将项目打包为可运行jar
难度:新手--战士--老兵--将军
准备:idea2019.02 / ZK3.4.12 / Gradle5.4.1 /JDK11
步骤:
1、 为了紧跟时代,升级了JDK,注意一点,如果原来的JDK使用exe安装的,必须要卸载掉,否则即使配置环境变量,JDK11也无效;
2、 idea设置JDK,;
gradle的JVM也要设置,然后refresh下项目即可,
3、 项目整体架构不变,三个模块common/provider/consumer;
为啥将这个接口单独放common里?因为dubbo中生产者和消费者都要使用到这个interface,都要依赖这个公共模块,如果放某个业务模块里,容易造成“循环依赖”,程序报错,所以对于需要做RPC的接口,尽量放公共模块。
4、 引入zklcient依赖:;
compile group: 'com.101tec', name: 'zkclient', version: '0.11'
5、 写controller层,顺带学习下lamda表达式,非常简洁,这里使用了两种方式,当然,也可以使用iterator或listIterator循环输出;
6、 测试:http://localhost:8082/oneService;
就可以看到GreetingService服务的生产者有哪些了:
测试:http://localhost:8082/method
可以看到zk中“/dubbo”路径下的子路径了,
以上只是zkClient的两个例子,还有读数据readData(path),写数据writeData(path),删除节点delete(path),判断存在exist(path)等,具体可参阅API,通俗讲,zkClient就是操作zk的API方法集。
7、 打包:;
关键就是build.gradle文件,打包jar,应注意区别,一是供别的项目或模块引用,jar包内容结构如下:直接从顶级包名"com"开始,
直到某个具体的class文件,
所以别的地方可以引用:
import com.example.common.api.GreetingService;
二是可运行的,jar包内容结构如下:
顺带说一下,如果是maven项目,build指定下插件即可生成不同的jar:pom.xml的build标签下指定不同的build插件即可:
spring-boot-maven-plugin
maven-jar-plugin
8、 打包过程,build.gradle文件是核心,以consumer中的为例:;
buildscript:即是说明build的环境,
ext:缺省附加属性扩展依赖
/*default extra properties extension */
repositories和dependencies不解释
以下是插件引入,gradle2.1版本之后,使用{ }方式,之前的使用 apply plugin:方式,这里引入java、idea,才有了jar、build等各种操作指令。
jar{ } ,必须有,指定jar内main函数入口,这里是provider中的build.gradle,
sourceSets{ }指定java主目录和test主目录:
9、 provider模块下,先clean,再build:;
最后的成品:build目录的libs下,
10、 到jar包目录,按住shift键,右键进入powershell,运行命令:;
java -jar --server.port=XXX --dubbo.protocol.port=XXXXXX
注意每个jar的端口不能相同,否则会提示端口无法bind,
这样就成功启动了同一service的两个提供者了!也可启动更多个,将来组成集群模式,做负载均衡。
11、 使用consumer模块的zkClient可以看到多个provider的实时信息注意如果有提示端口冲突,可适当修改服务的端口我这里改为了8085:;
12、 源码地址:其中的day03;
https://github.com/xiexiaobiao/dubbo-project.git
后记:
1、 gradle如何生成两种不同的jar:“build”即生成可运行的jar,“jar”即生成可引用的jar,;
2、 jdk11下载,有两个版本,exe和zip压缩版,建议zip压缩版,这样能避免一些安装产生的异常,JDK11没有JRE了,;