01. Dubbo,Zookeeper简介,安装

01.1 Dubbo

1. SOA

SOA是Service-Oriented Architecture的简称,它是一种面向服务的架构方式。它有如下几个显著特征:

  1. 系统由多个服务构成,每个服务可以单独部署。
  2. 每个服务内部是高类聚,即一个服务只关注解决一个功能,而服务之间是松耦合。
  3. 服务之间通过设计良好的接口进行交互。

为何需要SOA?

随着互联网的发展,网站应用规模不断扩大,基于单体架构的系统已经无法满足要求(测试成本高、可伸缩性差、难以做到跨语言等),而分布式服务架构能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化,尤其适合大型互联网应用的开发。

2. Apache Dubbo

2.1 Apache Dubbo简介

Apache Dubbo,前身是阿里巴巴开源项目Dubbo,它是一款高性能、轻量级的开源Java RPC(远程方法调用)框架。Dubbo提供了三大核心功能:

  1. 面向接口的远程方法调用
  2. 智能容错和负载均衡
  3. 服务自动注册和发现

2.2 Apache Dubbo架构

在这里插入图片描述

节点角色说明:

节点角色说明
Provider暴露服务的服务提供方
Consumer调用远程服务的服务消费方
Registry服务注册与发现的注册中心
Monitor统计服务的调用次数和调用时间的监控中心
Container服务运行容器

调用关系说明:

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

3. Zookeeper

3.1 Zookeeper简介

Zookeeper 是 Apacahe Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,并推荐使用。

3.2 Zookeepr架构

在这里插入图片描述

流程说明:

  • 服务提供者启动时: 向 /dubbo/com.foo.BarService/providers 目录下写入自己的 URL 地址
  • 服务消费者启动时: 订阅 /dubbo/com.foo.BarService/providers 目录下的提供者 URL 地址。并向 /dubbo/com.foo.BarService/consumers 目录下写入自己的 URL 地址
  • 监控中心启动时: 订阅 /dubbo/com.foo.BarService 目录下的所有提供者和消费者 URL 地址。

3.3 Zookeeper安装

3.3.1 安装
cd ~
tar -xzvf zookeeper-3.4.13.tar.gz
3.3.2 配置

在解压好的zookeeper文件夹下创建data目录用于存放运行时产生的数据:

cd zookeeper-3.4.13
mkdir data

复制zookeeper/conf目录下的zoo_sample.cfgzoo.cfg

cd conf
cp zoo_sample.cfg zoo.cfg

添加如下内容:

tickTime=2000 #保持默认
dataDir=/root/zookeeper-3.4.13/data #修改项
clientPort=2181 #保持默认
3.3.3 启动与关闭
cd /root/zookeeper-3.4.13/bin
./zkServer.sh start #启动
./zkServer.sh stop #关闭
./zkServer.sh status #查看状态

4. Helloworld

4.1 服务提供者

创建Spring Boot项目,添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

编写服务接口:

package com.turing.dubbo.service;

public interface HelloService {

	String hello(String name);

}

编写服务实现类:

package com.turing.dubbo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.turing.dubbo.service.HelloService;

@Service
public class HelloServiceImpl implements HelloService {

	@Override
	public String hello(String name) {
        return "Hello,"+name+".(From dubbo)";
    }

}

请注意,需要使用Dubbo提供的@Service注解。

application.yml

dubbo:
  application:
    name: dubbo-provider-demo
  registry:
    #注册中心地址
    address: zookeeper://192.168.0.104:2181
  #使用dubbo协议在20880端口暴露服务
  protocol:
    #协议名称,关键字
    name: dubbo
    #服务端口,不同的服务提供方,该端口应不同
    port: 20880

在Spring Boot启动类上启用Dubbo

@SpringBootApplication
@EnableDubbo
public class B2cDubboProviderApplication {

	public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

@EnableDubbo会扫描该注解所标注的类所在的包下所有添加了的@Service的类,并根据配置信息在注册中心进行服务的自动注册。

4.2 服务消费者

创建Spring Boot项目,添加如下依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

将在服务提供方编写的接口复制到项目中,编写Controller进行测试:

@RestController
public class TestController {

	@Reference
	private HelloService helloService;

	@RequestMapping("/test")
    public String test(){
        return helloService.hello("Jack");
    }

}

其中,@Reference将会在项目启动时在注册中心订阅相应的服务。

application.yml

dubbo:
  application:
    name: dubbo-consumer-demo
  registry:
    address: zookeeper://192.168.0.104:2181

在浏览器地址栏输入以下地址进行测试,消费放便会根据注册中心提供的URL(服务地址)调用提供方提供的服务:

http://localhost:8080/test

5. Dubbo admin

为了更好的查看Zookeeper注册中心里面,服务提供方和消费方的信息,我们可以使用官方提供的incubator-dubbo-ops(内含dubbo admin模块)项目来进行查看:

下载该项目master版本压缩包,进行解压,然后在IDE中引入其下的maven项目:dubbo-admin。

在使用前,打开项目的application.properties配置文件,修改如下项:

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest

dubbo.registry.address=zookeeper://192.168.0.104:2181 #修改自己zookeeper的ip地址

启动该项目,直接在地址栏输入:

http://localhost:7001

以默认用户名和密码进入,访问服务治理->提供者菜单项即可看到如下界面:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值