运行环境: JDK1.8、Tomcat8
技术栈:
springboot-2.1.1
dubbo-2.6.2
dubbo-spring-boot-starter-0.2.0
zookeeper-3.4.13
dubbo-admin-2.5.10
1、Zookeeper的安装和启动(单节点):
Java代码
将zookeeper-3.4.13.tar.gz安装包上传到Linux服务器的/opt/software/zookeeper目录下
解压安装包: tar -zxvf zookeeper-3.4.13.tar.gz
定位到/opt/software/zookeeper/zookeeper-3.4.13目录,分别创建名为data、dataLog的文件夹
定位到/opt/software/zookeeper/zookeeper-3.4.13/conf目录,创建zoo.cfg配置文件,文件内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/software/zookeeper/zookeeper-3.4.13/data
dataLogDir=/opt/software/zookeeper/zookeeper-3.4.13/dataLog
clientPort=2181
将2181端口添加到防火墙,确保客户端能正常访问到该端口
firewall-cmd --zone=public --add-port=2181/tcp --permanent
定位到/opt/software/zookeeper/zookeeper-3.4.13/bin目录下,执行 ./zkServer.sh start 命令启动zk服务
2、dubbo-admin的安装:
Java代码
将dubbo-admin.war安装包复制到Tomcat的webapps目录下
执行bin/startup.bat启动tomcat,然后停止tomcat
修改webappsdubbo-adminWEB-INFdubbo.properties配置文件的dubbo.registry.address参数值
dubbo.registry.address=zookeeper://192.168.134.134:2181
再次启动tomcat
以root账号登录
3、maven多模块项目的创建
创建一个maven项目dubbo,包括三个模块子项目,分别为:
dubbo-api: 存放服务接口、bean类等公共文件
dubbo-provider: 服务提供者工程
dubbo-consumer: 服务消费者工程
主项目的pom.xml文件配置:
Xml代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- springboot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-actuator</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-autoconfigure</artifactId>
<version>0.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.2</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<modules>
<module>dubbo-api</module>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
</modules>
</project>
4、dubbo-api工程
User.java
Java代码
package com.study.dubbo.api.bean;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = -8832914162040512009L;
private Long id;
private String username;
private String password;
public User(){
}
public User(Long id, String username, String password){
this.id = id;
this.username = username;
this.password = password;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Long getNowtime() {
return System.currentTimeMillis();
}
}
UserService.java —— 服务接口类
Java代码
package com.study.dubbo.api.service;
import com.study.dubbo.api.bean.User;
/**
* 定义dubbo服务接口
*/
public interface UserService {
public User getUser(long id);
}
5、dubbo-provider工程
UserServiceImpl.java —— 服务接口的实现类
Java代码
package com.study.dubbo.provider.service;
import org.springframework.stereotype.Component;
import com.alibaba.dubbo.config.annotation.Service;
import com.study.dubbo.api.bean.User;
import com.study.dubbo.api.service.UserService;
/**
* dubbo服务接口的实现类,使用@Service注解暴露dubbo服务
*/
@Service(interfaceClass=UserService.class, version="1.0.0", timeout=10000)
@Component
public class UserServiceImpl implements UserService {
@Override
public User getUser(long id) {
return new User(id, "zhangsan", "123");
}
}
application.properties
Java代码
server.port=8001
server.servlet.context-path=/dubbo-provider
##dubbo
dubbo.scan.basePackages=com.study.dubbo.provider.service
dubbo.application.name=provider-name
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.134.134:2181
pom.xml文件:
Xml代码
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-provider</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.study.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>com.study.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>dubbo-provider</finalName>
</build>
</project>
Main.java
Java代码
package com.study.dubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication()
public class Main{
public static void main(String[] args){
SpringApplication springApp = new SpringApplication(Main.class);
springApp.run(args);
}
@RequestMapping("/index")
public String greeting() {
return "hello provider";
}
}
执行Main.java类,启动服务提供者工程应用。
6、dubbo-consumer工程
ServiceConsumer.java
Java代码
package com.study.dubbo.consumer.service;
import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.study.dubbo.api.service.UserService;
@Service
public class ServiceConsumer {
/**
* 消费dubbo服务
*/
@Reference(version="1.0.0")
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
application.properties
Java代码
server.port=8002
server.servlet.context-path=/dubbo-consumer
##dubbo
dubbo.application.name=consumer-name
dubbo.registry.protocol=zookeeper
dubbo.registry.address=192.168.134.134:2181
pom.xml文件
Xml代码
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>dubbo-consumer</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>com.study.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>1.0.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>com.study.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>dubbo-consumer</finalName>
</build>
</project>
Main.java
Java代码
package com.study.dubbo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.study.dubbo.api.bean.User;
import com.study.dubbo.consumer.service.ServiceConsumer;
@RestController
@SpringBootApplication()
public class Main{
@Autowired()
private ServiceConsumer serviceConsumer;
public static void main(String[] args){
SpringApplication springApp = new SpringApplication(Main.class);
springApp.run(args);
}
@RequestMapping("/index")
public String greeting() {
User user = serviceConsumer.getUserService().getUser(110L);
return "hello consumer: username=" + user.getUsername() + ", password=" + user.getPassword() + ", nowtime=" + user.getNowtime();
}
}
执行Main.java类,启动服务消费者工程应用。
7、测试验证
刷新dubbo-admin的服务列表页面,可以看到列表中有一个UserService服务
浏览器访问: http://localhost:8002/dubbo-consumer/index ,页面会显示如下内容:
hello consumer: username=cjm, password=123, nowtime=1545402825287
至此,集成完毕!!