一.介绍
1.1 dubbo是阿里巴巴soa服务化治理方案的核心框架,是一个分布式服务的框架,致力于提高性能和透明化rpc远程服务调用方案,对于soa服务治理方案。看到这里会有点懵,什么是soa呢,什么是rpc呢???
soa:面向服务的架构,将应用程序的不同功能单元(也叫作服务)通过服务之间的定义良好的接口和契约联系起来。
rpc:远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
1.2 在dubbo+zookeeper中有三个重要的角色:
1). provider(服务提供者):在我们项目中可以粗糙地理解成实现类
2).Consumer(服务消费者):可以理解为调用服务(调用实现类)的类,类似于controller,当然如果集成rabbitmq也有可能是消息队列的类,也有可能是实现类调用实现类,所以实现类可以身兼数职,既可以是服务提供者也可以是服务调用者。
3).registry(zookeeper):也就是我们的注册中心,zookeeper是Apache下的产品。没有用dubbo之前我们一般是controller调用service,service调用mapper(dao),但是现在加上了dubbo以后就是controller(当然不止controller,所有服务消费者都可以)通过向zookeeper订阅服务,service向zookeeper注册服务,通过zookeeper这个中介,把服务提供方的服务注入到服务消费者中。
二.实践demo
2.1 首先创建一个maven父级项目,然后在父级项目下创建三个子项目模块.如下图所示:
解释:
boot-dubbo-api是service接口和实体类对象
boot-dubbo-consumer是消费者,就是controller接口
boot-dubbo-provider是生产者,就是service接口的实现类
2.2 boot-dubbo-api内部依赖以及demo
1).依赖
4.0.0
com.ligh
boot-dubbo-api
1.0
pom
UTF-8
UTF-8
1.8
2). 实体类
/**
* Created by ${ligh} on 2019/1/29 下午7:26
*/
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String username;
private String password;
private String city;
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 String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
3). service接口
import com.ligh.domain.User;
/**
* Created by ${ligh} on 2019/1/29 下午7:27
*/
public interface UserService {
//测试方法
public User getUser();
}
2.3 boot-dubbo-provider内部依赖以及demo
1).依赖
boot-dubbo
com.ligh
1.0-SNAPSHOT
4.0.0
boot-dubbo-provider
UTF-8
UTF-8
1.8
com.ligh
boot-dubbo-api
1.0
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
org.springframework.boot
spring-boot-starter-web
2.0.4.RELEASE
org.springframework.boot
spring-boot-starter-test
2.0.4.RELEASE
test
junit
junit
4.7
org.springframework.boot
spring-boot-maven-plugin
2).配置文件application.properties
server.port=8081
## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=2088
spring.dubbo.scan=com.ligh.serviceImpl
3).service实现类
import com.alibaba.dubbo.config.annotation.Service;
import com.ligh.domain.User;
import com.ligh.service.UserService;
import javax.annotation.PostConstruct;
/**
* Created by ${ligh} on 2019/1/29 下午7:31
*/
@Service
public class UserServiceImpl implements UserService{
//项目启动就会加载
@PostConstruct
void init(){
System.out.println("user 测试");
}
@Override
public User getUser() {
User user = new User();
user.setUsername("李国辉");
user.setPassword("12345678");
user.setCity("杭州");
return user;
}
}
2.4 boot-dubbo-consumer内部依赖以及demo
1).依赖
boot-dubbo
com.ligh
1.0-SNAPSHOT
4.0.0
boot-dubbo-consumer
UTF-8
UTF-8
1.8
com.ligh
boot-dubbo-api
1.0
io.dubbo.springboot
spring-boot-starter-dubbo
1.0.0
org.springframework
spring
org.springframework.boot
spring-boot-starter-web
2.0.4.RELEASE
org.springframework
spring
org.springframework.boot
spring-boot-starter-test
2.0.4.RELEASE
org.springframework
spring
test
junit
junit
4.7
org.springframework
spring
org.springframework.boot
spring-boot-maven-plugin
2).配置文件application.properties
## 避免和 server 工程端口冲突
server.port=8082
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.ligh.controller
3).controller接口
import com.alibaba.dubbo.config.annotation.Reference;
import com.ligh.domain.User;
import com.ligh.service.AddService;
import com.ligh.service.UserService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
/**
* Created by ${ligh} on 2019/1/30 上午8:12
*/
@RestController
public class UserController {
@Reference
UserService userService;
@Reference
AddService addService;
@RequestMapping("hello")
public String hello(){
addService.sayhello();
return "success";
}
@RequestMapping(value = "getUser")
public User getUser(){
User user = userService.getUser();
return user;
}
}
2.5 启动顺序
首先启动生产者(boot-dubbo-provider)–>然后就是消费者(boot-dubbo-consumer),如果启动都没有报错,就成功了一大半。
三. 搭建dubbo-admin环境,通过界面查看生产者和消费者之间是否产生调用关系
3.1 搭建环境之前首先要搭建zookeeper环境,如果不会的朋友可以点击下面链接zookeeper安装启动教程
3.2 下载dubbo-admin源码包,源码包下载地址,修改/dubbo-admin/src/main/webapp/WEB-INF/dubbo.properties的配置文件,如果是本地无需配置
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=root
3.3 配置完成之后在dubbo-admin的目录下直接执行打包编译命令
mvn clean install -Dmaven.test.skip=true
3.4 然后进入到target目录下找到dubbo-admin-2.8.4.war,把改war包放在tomcat的webapps目录下,然后启动tomcat,在浏览器中输入地址http://localhost:8080/dubbo-admin-2.8.4提示输入用户名和密码都是root,然后输入进入以下界面表示成功
3.5 输入本机ip地址localhost可以进行查看接口是否已经注册到注册中心
两个在boot-dubbo-api中的service接口已经注册到注册中心中,可以供消费者消费了。
3.6 在浏览器中输入消费者项目中的controller,查看dubbo-admin是否有消费记录
然后查看dubbo-admin是否有消费记录
从图中可以清楚的看到已经通知消费记录了。
以上就完成了基于Springboot搭建zookeeper做注册中心,dubbo做生产者和消费者,并且通过dubbo-admin进行界面的管理。