一、准备工作
1.安装zookeeper
dubbo
项目官方建议使用zookeeper
做为dubbo
的服务注册与发现的注册中心,所以首先需要在服务器中安装zookeeper
。我使用的是mac开发,在mac中,首先cd到你要安装的目录,然后使用brew命令brew install zookeeper
,等待安装完成后,cd到Cellar
,然后cd zookeeper/3.4.13/bin
,
在bin中执行
zkServer start
,
运行zookeeper
。
brew
安装好的zookeeper是配置好的,不用手动去配置
zoo.cfg
文件,如果要手动修改配置文件的话,可以在安装根目录中进入
/etc/zookeeper
目录修改
zookeeper
。
2.部署dubbo后台管理
打开dubboGithub链接,下载zip文件,然后使用maven
进行打包,然后在dubbo-admin-server
的target
中得到dubbo-admin-server-0.1.jar
,
拷贝jar包到其他目录中,这里我拷贝到本地
tomcat
的
webapps
中,使用命令
java -jar dubbo-admin-server-0.1.jar
运行项目,然后就可以本地通过
localhost:8080
访问dubbo管理后台了。
这里可以看到注册到后台的接口等其他信息,暂时还没有详细研究。
二、正式创建项目
1.创建多模块项目
使用idea新建一个Spring Initializr
项目
配置
Group``Artifact
等
一直
next
到项目创建
在打开的dubbo项目中右击新建module
依次创建
dubbo-api
,
dubbo-server
,
dubbo-web
三个模块,其中api是提供接口,server是接口的实现类。
2.配置项目
创建好项目后要分别配置一下项目的pom.xml
文件,我直接贴出来
父项目的
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
com.crossyf.dubbo
dubbo
0.0.1-SNAPSHOT
dubbo
Demo project for Spring Boot
pom
dubbo-api
dubbo-service
dubbo-web
UTF-8
UTF-8
1.8
2.1.6.RELEASE
8.5.42
2.0.0
3.4.10
0.5
1.0.0
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-configuration-processor
true
com.alibaba.spring.boot
dubbo-spring-boot-starter
${dubbo.version}
com.101tec
zkclient
${zkclient.version}
org.apache.zookeeper
zookeeper
${zookeeper.version}
org.springframework.boot
spring-boot-dependencies
2.1.6.RELEASE
pom
import
org.springframework.boot
spring-boot-maven-plugin
api
的pom
4.0.0
com.crossyf.dubbo
dubbo
0.0.1-SNAPSHOT
jar
dubbo-api
com.crossyf.dubbo
0.0.1-SNAPSHOT
dubbo-api
http://maven.apache.org
Demo project for Spring Boot
UTF-8
1.8
com.crossyf.dubbo.web.DubboWebApplication
org.springframework.boot
spring-boot-maven-plugin
exec
注意 这里pom
里的build
标签内的内容,如果不加上这个,sevice
运行是没有问题的,但是使用maven
构建项目的时候,所有引用到api module
里的包名都会报错找不到包名
。这里我在这里耽误了很久,找不到问题,最后在这个帖子里找到了答案
https://hbxflihua.iteye.com/blog/2431537
service
的pom
4.0.0
com.crossyf.dubbo
dubbo
0.0.1-SNAPSHOT
0.0.1-SNAPSHOT
http://maven.apache.org
1.8
UTF-8
com.crossyf.dubbo
dubbo-service
dubbo-service
Demo project for Spring Boot
com.crossyf.dubbo
dubbo-api
0.0.1-SNAPSHOT
dubbo-service
${project.build.directory}/classes
src/main/resources
true
**/*.xml
**/*.properties
**/*.yml
org.eclipse.m2e
lifecycle-mapping
1.0.0
org.apache.maven.plugins
maven-dependency-plugin
[2.0,)
copy-dependencies
org.apache.maven.plugins
maven-jar-plugin
target/classes/
com.crossyf.dubbo.service.DubboServiceApplication
false
true
lib/
.
org.apache.maven.plugins
maven-dependency-plugin
copy-dependencies
package
copy-dependencies
jar
jar
${project.build.directory}/lib
web
的pom
4.0.0
com.crossyf.dubbo
dubbo
0.0.1-SNAPSHOT
com.crossyf.dubbo
dubbo-web
0.0.1-SNAPSHOT
dubbo-web
Demo project for Spring Boot
war
1.8
org.springframework.boot
spring-boot-starter-web
2.1.6.RELEASE
${project.groupId}
dubbo-api
${project.version}
com.ibeetl
beetl-framework-starter
1.1.22.RELEASE
dubbo-web
3.配置application.yml
文件
service
的application.yml
如下
port: 8094
servlet:
context-path: /dubbo-service
spring:
http:
encoding:
charset: UTF-8
force: true
enabled: true
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
name: Provide
registry: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://192.168.3.38:2181
protocol: #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
name: dubbo
port: 20880
scan: com.crossyf.dubbo.service.impl #服务暴露与发现消费所在的package
web
的application.yml
server:
port: 8092
servlet:
context-path: /dubbo-web
spring:
http:
encoding:
charset: UTF-8
force: true
enabled: true
multipart:
dubbo:
application: #应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
name: Customer
id: Customer
registry: #注册中心配置,用于配置连接注册中心相关信息。
address: zookeeper://192.168.3.38:2181
protocol:
name: dubbo
port: 20880
4.编写测试代码
在api
模块中创建一个接口DemoApi
,定义一个方法
* @author Created by YangFan.
* @date 2019/7/8
* 功能:
*/
public interface DemoApi {
/**
* 打招呼
* @param name 名称
* @return 结果
*/
String sayHello(String name);
}
然后在service中创建接口的实现类DemoApiImpl
/**
* @author Created by YangFan.
* @date 2019/7/8
* 功能:
*/
@Service
public class DemoApiImpl implements DemoApi {
@Override
public String sayHello(String name) {
return "Hello," + name + " from dubbo Demo2222";
}
}
在web
中创建测试控制器DemoController
/**
* @author Created by YangFan.
* @date 2019/7/8
* 功能:
*/
@RequestMapping(value = "/demo")
@RestController
public class DemoController {
@Reference
private DemoApi demoApi;
@RequestMapping(value = "/index")
public String index(){
return demoApi.sayHello("dubbo");
}
}
这里需要注意点地方是,注解@Service
是引入的com.alibaba.dubbo.config.annotation.Service
的包名。
5.运行测试项目
运行DubboWebApplication
和 DubboServiceApplication
可以在dubbo
后台中发现api
已经注册到后台
然后访问
http://localhost:8092/dubbo-web/demo/index
,可以返回相关内容
把项目进行maven打包,
service
中得到
dubbo-service.jar
包,将得到的
jar
包放在另一台机器中运行,我这里在虚拟机中运行的(拟机环境是centos7),运行后我们在进入
dubbo-admin
后台中,可以看到
DemoAPi
就有两个提供者了。
现在修改当前项目的DemoApiImpl
打印的信息,然后重新运行项目,在地址栏输入http://localhost:8092/dubbo-web/demo/index
,不断的刷新,可以看到返回的结果是随机的展现出来的,基本完成了dubbo
与zookeeper
的项目。