分布式架构试水-zookeeper+dubbo+springboot
Posted 一个程序猿的生活
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式架构试水-zookeeper+dubbo+springboot相关的知识,希望对你有一定的参考价值。
分布式架构试水-zookeeper+dubbo+springboot
随着互联网的发展,应用系统变得越来越庞大,单体应用由于存在着「修改一点全部都需部署」的问题,让开发和测试做了好多重复的工作,苦不堪言。我们需要引入「微服务」的理念,对项目根据业务进行模块化拆分。
比如,一个商城系统可以拆分为产品product服务、订单order服务、用户user服务。服务之间的通讯(比如用户服务需要查看某一用户的订单数据)就需要用到RPC(远程过程调用),需要服务提供者将服务发布到注册中心(zookeeper)中,然后服务消费者来调用自己需要的服务。注册中心就相当于服务的中介起到牵线搭桥的作用。
一、技术简介
1、Zookeeper
Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Zookeeper主要用来做注册中心,下面会使用docker安装启动Zookeeper。
①下载zookeeper镜像。使用docker中国的镜像加速。
docker pull registry.docker-cn.com/library/zookeeper
②启动zookeeper,使用镜像的ID启动。
docker run --name zk01 -p 2181:2181 --restart always -d 397be0d8fa45
2、Dubbo
Dubbo是阿里巴巴开源的分布式服务框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度的松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是需求方消费服务,所以基于这一点可以抽象出服务提供方(provider)和服务消费方(consumer)两个角色
使用dubbo来作为rpc框架来保证服务的调用。
下图是dubbo的架构图,中文文档http://dubbo.apache.org/books/dubbo-dev-book/design.html
1.Provider: 暴露服务的服务提供方.
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
3、创建服务提供者和消费者两个工程
提供者:
①服务提供者,引入bubbo的Springboot的starter
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
引入zookeeper的客户端工具
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
②配置application配置文件
dubbo.application.name=provider-do
#注册中心地址
dubbo.register.address=zookeeper://172.20.10.8:2181
#dubbo的扫描包
dubbo.scan.base-packages=com.pcx.providerdo.service
③在服务的类中添加dubbo的@service
启动application即可.
package com.pcx.providerdo.service;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service
public class DoserviceImpl implements DoService {
@Override
public String doThing() {
return "我在做事-----------------";
}
}
for dubbo config bean [name : 1] has been registered.成功发布
消费者:
①引入依赖
dubbo.application.id=consumer
dubbo.register.address=zookeeper://172.20.10.8:2181
③使用:
package com.pcx.consumer.service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.pcx.service.DoService;
import org.springframework.stereotype.Service;
@Service
public class GoService {
@Reference
DoService doService;
public void hello(){
String s = doService.doThing();
System.out.println("你在干啥"+s);
}
}
控制台打印「你在干啥我在做事---------------」
即可。
以上是关于分布式架构试水-zookeeper+dubbo+springboot的主要内容,如果未能解决你的问题,请参考以下文章
Dubbo与Zookeeper视频教程(分布式架构+第三方支付)完整版
分布式服务:Dubbo+Zookeeper+Proxy+Restful 分布式架构
JEESZ架构分布式服务:Dubbo+Zookeeper+Proxy+Restful