文章目录
01.1 Dubbo
1. SOA
SOA是Service-Oriented Architecture的简称,它是一种面向服务的架构方式。它有如下几个显著特征:
- 系统由多个服务构成,每个服务可以单独部署。
- 每个服务内部是高类聚,即一个服务只关注解决一个功能,而服务之间是松耦合。
- 服务之间通过设计良好的接口进行交互。
为何需要SOA?
随着互联网的发展,网站应用规模不断扩大,基于单体架构的系统已经无法满足要求(测试成本高、可伸缩性差、难以做到跨语言等),而分布式服务架构能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化,尤其适合大型互联网应用的开发。
2. Apache Dubbo
2.1 Apache Dubbo简介
Apache Dubbo,前身是阿里巴巴开源项目Dubbo,它是一款高性能、轻量级的开源Java RPC(远程方法调用)框架。Dubbo提供了三大核心功能:
- 面向接口的远程方法调用
- 智能容错和负载均衡
- 服务自动注册和发现
2.2 Apache Dubbo架构
节点角色说明:
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用关系说明:
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
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.cfg
为zoo.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
以默认用户名和密码进入,访问服务治理->提供者
菜单项即可看到如下界面: