前言
继上一篇ZooKeeper的安装和启动,本篇将结合springboot+duboo+zookeeper来一次实战演练,话不多说,继续我们的实战。
dubbo介绍
Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成。(现在有当当网在维护)
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
dubbo核心工作原理
名词解释:
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Registry | 服务的注册与发现的注册中心,如zookeper(推荐)、multicast、redis、simple |
Consumer | 调用远程服务的服务消费方 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行容器 |
调用流程
-
服务器负责启动,加载,运行服务提供者。
-
服务提供者在启动时,向注册中心注册自己所提供的服务
-
服务消费者在启动时,向注册中心订阅自己所需的服务
-
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于TCP长连接推送变更数据给消费者
-
服务消费者从提供的服务列表中,基于软负载均衡算法,选一台提供者进行调用,如果失败,则选择另一台调用
-
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到检测中心
由于本篇是实战演练,dubbo的介绍就简单到这里。
springBoot-dubbo项目搭建
1.项目结构
项目结构如下图所示:
1.dubbo-provider---服务提供者,springboot构建
2.dubbo-consumer---服务消费者,springboot构建
3.dubbo-api---服务提供者的接口API,maven构建
结合dubbo的工作原理理解:
- dubbo-provider先在容器里初始化启动
- dubbo-provider去注册中心(zookeeper)去注册服务
- dubbo-consumer去注册中心订阅自己所需的服务
- 注册中心返回dubbo-provider的服务地址列表给消费者
- dubbo-consumer直接去调用dubbo-provider服务
- dubbo-consumer和dubbo-provider在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到检测中心
2.项目依赖
dubbo-provider和dubbo-consumer都需要依赖下面的jar包
<!-- dubbo依赖 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 引入zookeeper的依赖 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
3.服务提供者
服务提供者dubbo-provider提供TestService.testApi(String name)接口
package com.dubbo.provider.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.service.TestService;
import org.springframework.stereotype.Component;
//dubbo注解,暴露服务
@Service
@Component
public class TestServiceImpl implements TestService {
@Override
public String testApi(String name) {
return "I am test:" + name;
}
}
package com.dubbo.provider;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
application.properties文件配置:
#配置端口
server.port=8088
spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181
4.服务消费者
dubbo-consumer远程调用dubbo-provider提供的服务TestService.testApi(String name)接口
package com.dubbo.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.service.TestService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@Reference
private TestService testService;
@RequestMapping(value = "/test")
public String hello() {
String hello = testService.testApi("One");
return hello;
}
}
package com.dubbo.consumer;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//开启dubbo的自动配置
@EnableDubboConfiguration
@SpringBootApplication
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
application.properties文件配置:
# 配置端口
server.port=8099
spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181
5.测试
A.先启动本地的ZooKeeper(我本地已经安装了zk,没安装的同学可以参照我上一篇文章安装即可:https://mp.csdn.net/postedit/104081563)
B.再启动服务提供者dubbo-provider,如下图所示则表示服务已经向注册中心(ZooKeeper)注册成功了
C.启动服务消费者dubbo-consumer,如下图所示则表示服务已经向注册中心(ZooKeeper)订阅成功了
这里可以看出和服务提供者是一样的打印输出。
D.结果展示
至此,整个集成过程的实战演练就结束了,有没有觉得很简单呢,自己赶紧动手试试吧。