Dubbo - Dubbo框架搭建
简单说明
Dubbo是一个基于RPC协议的分布式框架,RPC的全称为Remote Procedure Call,其目的为实现远程调用。而分布式的目的是为了能够更好的针对不同的业务进行横向扩展,从而使得程序稳定高可用,响应速度快。所以一个基于RPC协议的分布式框架,是一个非常不错的Idea。Dubbo使用RPC协议而不用HTTP协议,我们可以在百度百科上了解到,RPC协议跨了OSI架构的应用层和传输层,传输速度步骤简化所以速度会更快。不得不说Dubbo对技术起点的选择真的很棒!
基础概念
- 在Dubbo中,提供服务的应用叫做提供者
provider
。消费服务的应用叫做消费者consumer
。当一个provider需要调用别的provider提供的服务,那么这个provider既是提供者也是消费者
。 - 所有的分布式服务,都会将服务暴露出去,所谓暴露就是提供接口让别的应用调用。常见的Http接口提供方实际上也可以认为是一个分布式应用。
- Dubbo中的服务暴露或者说服务注册,需要
依赖第三方的注册中心
,如ZooKeeper。provider将服务注册到zk中,consumer在zk中查找并调用服务。但服务最终是在提供者所在服务器执行
一、安装ZooKeeper
一下载,二配置,三安装。详情请参阅《Dubbo - ZooKeeper的安装和基本使用》
二、搭建提供者项目
搭建提供者项目基本思路如下:
- 搭建一个Maven多模块工程,至少需要分成三个子工程,一个用于暴露,一个用于实现,一个用于启动。
- 添加jar依赖
- 添加dubbo配置文件
- 增加Dubbo提供者启动类
四个步骤即可完成提供者的搭建。
搭建一个Maven多模块工程
我们假设为用户模块单独搭建一个服务,那么得到以上用户模块服务提供者项目
。可以看出这是一个Maven多模块项目。现在一一解释:- dubbo-user-service工程为
父工程
- user-servce工程为
暴露工程
,负责定义对外暴露的接口和对象 - user-service-impl工程为
接口实现工程
,负责对接口的实现 - user-startup工程为
启动工程
,它将加载上下文并启动Dubbo服务
这些工程中我简单说明以下几点:
- user-service, user-service-impl, user-startup工程的parent都是dubbo-user-service。
- user-service-impl依赖了user-serivce
- user-startup依赖了user-service-impl
- dubbo-user-service工程为
消费者只需要引入user-service即可对用户模块dubbo服务的调用。
添加jar依赖
当我们搭建好一个这样的多模块项目后,我们需要引入依赖的jar包- 在dubbo-user-service/pom.xml中增加
2.6.3
在parent工程中定义dubbo的版本,便于管理包版本。这里采用dubbo-2.6.3
在user-service-impl/pom.xml中增加
org.springframework
spring-context
4.3.6.RELEASE
provided
com.chinack
user-service
1.0-SNAPSHOT
增加spring-context包是为了在实现类中使用@Service
注解来声明service组件。可以看到spring-context的scope为provided
,因为该包在user-startup中已经引入。
在user-startup/pom.xml中增加
com.alibaba
dubbo
${dubbo.version}
org.apache.zookeeper
zookeeper
3.4.13
org.apache.curator
curator-framework
4.0.1
com.chinack
user-service-impl
${project.version}
搭建Dubbo提供者最重要的三个包就在这里
引入
Dubbo依赖包
,版本为2.6.3
(版本在dubbo-user-service/pom.xml>中定义);
引入zk包
用于将服务注册到zk中;
引入了curator
依赖包。
最后引入了我们的接口实现工程
。之前有说过user-startup依赖了spring的包,那是因为Dubbo本身就依赖了它所需要的spring包
。
这样,所有的jar包依赖都做好了。
增加配置文件
在user-startup/src/main/resources
中增加spring.xml
和user-dubbo-provider.xml
配置文件,如下:- user-dubbo-provider.xml
<?xml version=”1.0” encoding=”UTF-8”?>
- spring.xml
<?xml version=”1.0” encoding=”UTF-8”?>
增加Dubbo提供者启动类
我们在user-startup工程中构建一个Application类用于启动,代码如下:public class Application {
public static void main(String[] args){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring.xml");
applicationContext.start();
System.out.println("User provider started");
try {
// 为了防止上下文加载后自动关闭,通过接收用户输入流来阻止。
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
到这里,服务提供者就算搭建完成了。我们可以编写一个服务如UserService,然后搭建一个Dubbo Admin用于查看是否成功注册到本地zk中,如下图:
三、搭建消费者项目
搭建消费者基本思路:
- 搭建一个web项目
- 添加jar依赖
- 添加消费者配置
三个步骤即可完成消费者项目的搭建,这里我以Spring Boot为例
- 搭建一个Spring Boot项目(略)
添加jar依赖
<dubbo.version>2.6.3</dubbo.version>
com.alibaba
dubbo
${dubbo.version}
org.apache.curator
curator-framework
4.0.1
com.chinack
user-service
1.0-SNAPSHOT
添加消费者配置
在resources下增加配置文件dubbo-consumer.xml如下:<?xml version=”1.0” encoding=”UTF-8”?>
增加配置类,加载dubbo-consumer.xml文件
package com.chinack.consumer.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
/** * 加载Dubbo消费者配置 * @author Chinack * @date 2018/10/8 16:53 */
@Configuration
@ImportResource("classpath:dubbo-consumer.xml")
public class DubboConsumerConfig {
}
这样,消费者项目就搭建完成了。我们可以尝试创建Controller调用提供者的service。注意:默认情况下消费者会对提供者进行检查,如果提供者未启动,则会出现Failed to check the status of the service xxx
。成功启动并调用到了user-service提供的用户服务后得到下图:
具体内容可以看源码,我把源码放在了gitee上。
源码地址:https://gitee.com/ck-tech/dubbo
(完)
还没有评论,来说两句吧...