avatar

目录
基于zookeeper的应用:Dubbo

代码地址:springboot-dubbo

第8章 Dubbo入门到重构服务

8-1 架构演变过程

基于zookeeper的应用

  • 分布式协调服务dubbo

  • 分布式锁

基于服务的架构演变过程

单一应用(一个war包,一个数据库,放在一台服务器上)–> MVC分层

多个c和多个s –> 对s进行整合(Dubbo)

图例1:

![屏幕快照 2018-11-22 下午4.48.43](20181122215242450/屏幕快照 2018-11-22 下午4.48.43.png)

图例2:

![屏幕快照 2018-11-22 下午10.11.58](20181122215242450/屏幕快照 2018-11-22 下午10.11.58.png)

系统之间的调用方式

  • Webservice - wsdl(很老,算是被淘汰了)

  • httpclient

  • rpc通信(dubbo)/restful(springcloud)

8-2 dubbo 入门简介

  • 官网 dubbo.io http://dubbo.apache.org/zh-cn/
  • 国产(阿里巴巴)的优秀框架
  • 京东、当当(dubbox)都在使用
  • 最大程度解耦,降低系统耦合性
  • 生产者/消费者模式
  • zk注册中心,admin监控中心,协议支持

高性能Java RPC框架

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

architecture

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

pom

xml
1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>

单体到分层模式

![屏幕快照 2018-11-23 上午11.52.07](20181122215242450/屏幕快照 2018-11-23 上午11.52.07.png)

利用maven进行项目拆分

8-3 duboo使用:生产者/消费者模式

使用springboot+dubbo实现生产者/消费者

maven聚合工程的结构:

Code
1
2
3
4
5
6
7
8
9
springboot-dubbo
springboot-dubbo-common (基本的maven坐标、工具类)
springboot-dubbo-producer (依赖api)
service.impl (业务实现)
springboot-dubbo-consumer (依赖api)
controller (调用api接口)
springboot-dubbo-api
service (抽象服务)
domain (实体)

版本:

springboot 2.1.0.RELEASE

dubbo-spring-boot-starter 0.2.0

dubbo 2.6.2

核心代码:

dubbo-api

\service

java
1
2
3
4
5
6
7
package machine.sbd.api.service;
import machine.sbd.api.domain.User;
public interface UserService {

void saveUser(User user);

}

dubbo-producer

\pom

xml
1
2
3
4
5
<!-- dubbo starter-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>

\application.properties

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## Dubbo 服务提供者配置

# 服务名称
dubbo.application.name = sbd-provider

# 注册中心地址:使用zk作为注册中心
dubbo.registry.address = zookeeper://10.211.55.6:2181

# 默认值
# 监控中心:使用注册中心(registry)去发现监控中心
dubbo.monitor.protocol = registry

# 暴露服务使用的协议:dobbo协议
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

# 扫描dubbo的@service注解,注册服务
dubbo.scan.basePackages = machine.sbd.producer.service.impl

\servie.impl

java
1
2
3
4
5
6
7
8
9
10
11
12
13
package machine.sbd.producer.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import machine.sbd.api.domain.User;
import machine.sbd.api.service.UserService;

//dubbo的@Service注解:将服务注册到dubbo(zk节点上)
@Service
public class UserServiceImpl implements UserService{
@Override
public void saveUser(User user) {
System.out.println("保存对象:"+ user.toString());
}
}

\启动服务

java
1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
public class SpringbootDubboProducerApplication{

public static void main(String[] args) {

//没有springboot-web-start,启动的是非web应用
SpringApplication.run(SpringbootDubboProducerApplication.class, args);

}
}

dubbo-consumer

\application.properties

properties
1
2
3
4
5
6
7
server.port = 8081

## Dubbo 服务消费者配置
dubbo.application.name = sbd-consumer
dubbo.registry.address = zookeeper://10.211.55.6:2181
# 默认值
dubbo.monitor.protocol = registry

\controller

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@RestController
@RequestMapping("/user")
public class UserController {

//调用在dubbo注册的服务接口
@Reference
private UserService userService;

@RequestMapping("/add")
String addUser(){
User user = new User();
user.setName("大王");
user.setAge(20);
userService.saveUser(user);
String ret = "用户添加成功:"+user.toString();
return ret;
}
}

\启动

启动

Code
1
2
3
- 启动zk
- 启动producer
- 启动consumer

8-4 dubbo使用:dubbo监控

  • dubbo提供监控服务,启动运行后可对 服务提供方 以及 消费者进行监控,查看被调用次数、成功失败次数、并发数
  • 下载dubbo源码并编译,提取 监控服务 的安装包 运行

编译dubbo源码

从2.6.1开始,将Dubbo Admin 单独抽取出来了,这里采用2.6.0版本

下载与项目对应版本的源码:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0

项目导入idea > maven pakage 打包dubbo-simple\dubbo-monitor-simple

生成dubbo-monitor-simple-2.6.0-assembly.tar.gz ,解压

修改conf\dubbo.properties

properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dubbo.container=log4j,spring,registry,jetty
dubbo.application.name=simple-monitor
dubbo.application.owner=
#dubbo.registry.address=multicast://224.5.6.7:1234
# 1、
dubbo.registry.address=zookeeper://10.211.55.6:2181
#dubbo.registry.address=redis://127.0.0.1:6379
#dubbo.registry.address=dubbo://127.0.0.1:9090
dubbo.protocol.port=7070
# 2、使用的是jetty服务器
dubbo.jetty.port=8082
#dubbo.jetty.directory=${user.home}/monitor
dubbo.jetty.directory=mxx/monitor
dubbo.charts.directory=${dubbo.jetty.directory}/charts
dubbo.statistics.directory=${user.home}/monitor/statistics
dubbo.log4j.file=logs/dubbo-monitor-simple.log
dubbo.log4j.level=WARN

运行bin\start.sh、访问http://localhost:8082/

运行provider 和 consumer

点击service,界面如下:

![屏幕快照 2018-11-24 下午8.25.28](20181122215242450/屏幕快照 2018-11-24 下午8.25.28.png)


监控服务使用\测试

![屏幕快照 2018-11-24 下午8.42.18](20181122215242450/屏幕快照 2018-11-24 下午8.42.18.png)

图表:

![屏幕快照 2018-11-24 下午8.43.43](20181122215242450/屏幕快照 2018-11-24 下午8.43.43.png)

8-5 关于版本

  • 2012年停止更新,版本停留在2.5.3,5年后恢复更新

  • 当当基于此(2.5.3),开发了dubbox

  • 2017年开始重新更新

  • 截止2018-11-24,更新到2.6.4,Dubbo Admin 正在重构

文章作者: Machine
文章链接: https://machine4869.gitee.io/2018/11/22/20181122215242450/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 哑舍
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论