分布式架构试水-zookeeper+dubbo+springboot

随着互联网的发展,应用系统变得越来越庞大,单体应用由于存在着「修改一点全部都需部署」的问题,让开发和测试做了好多重复的工作,苦不堪言。我们需要引入「微服务」的理念,对项目根据业务进行模块化拆分。

比如,一个商城系统可以拆分为产品product服务、订单order服务、用户user服务。服务之间的通讯(比如用户服务需要查看某一用户的订单数据)就需要用到RPC(远程过程调用),需要服务提供者将服务发布到注册中心(zookeeper)中,然后服务消费者来调用自己需要的服务。注册中心就相当于服务的中介起到牵线搭桥的作用。

分布式架构试水-zookeeper+dubbo+springboot

一、技术简介

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

分布式架构试水-zookeeper+dubbo+springboot

Dubbo是阿里巴巴开源的分布式服务框架,最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度的松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是需求方消费服务,所以基于这一点可以抽象出服务提供方(provider)和服务消费方(consumer)两个角色

使用dubbo来作为rpc框架来保证服务的调用。

下图是dubbo的架构图,中文文档http://dubbo.apache.org/books/dubbo-dev-book/design.html

分布式架构试水-zookeeper+dubbo+springboot

1.Provider: 暴露服务的服务提供方.

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

3、创建服务提供者和消费者两个工程

提供者:

①服务提供者,引入bubbo的Springboot的starter

 com.alibaba.boot dubbo-spring-boot-starter 0.2.0

引入zookeeper的客户端工具

 com.github.sgroschupf zkclient 0.1

②配置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@Servicepublic 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;​@Servicepublic class GoService {​ @Reference DoService doService;​ public void hello(){ String s = doService.doThing(); System.out.println("你在干啥"+s); }}

控制台打印「你在干啥我在做事---------------」

即可。


分享到:


相關文章: