话不多说,先来代码:https://github.com/wushidong125/springboot-dubbo 欢迎fork一起学习。
一、为啥整合 Dubbo 实现 SOA
我们常常使用 Springboot 暴露 HTTP 服务,并走 JSON 模式。但慢慢量大了,一种 SOA 的治理方案。这样可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 调用。下面我们详解下如何集成 Dubbo。
二、项目搭建
项目是一个maven的聚合项目如下:其中dubbo-clinet,dubbo-service是springboot-dobbo的一个模块。
先看一个父项目需要的依赖配置,这个将一个公共的依赖包都放在父项目的pom文件中。注意这个的
<packaging>pom</packaging>
说明是一个聚合的maven项目。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.spring.springboot</groupId>
<artifactId>springboot-dubbo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>springboot-dubbo</name>
<description>Demo project for Spring Boot</description>
<modules>
<module>dubbo-server</module>
<module>dubbo-client</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
</properties>
<dependencies>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
</dependency>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
三、Zookeeper 环境搭建
这个需要zookeeper 作为服务的注册中心。ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等
zookeeper在Dubbo中扮演了一个什么角色,起到了什么作用啊?
流程:
1、服务提供者启动时,向/dubbo/org.spring.springboot.dubbo.CityDubboService/providers 目录下写入URI
2、服务消费者启动时,订阅/dubbo/org.spring.springboot.dubbo.CityDubboService/providers 目录下的URI
并向/dubbo/org.spring.springboot.dubbo.CityDubboService/consumers目录下写下自己的URI
3、监控中心启动时订阅/dubbo/org.spring.springboot.dubbo.CityDubboService 目录下所有的提供者和消费者的URI。
支持下面的功能:
1、当提供者出现断电等服务异常停机时,注册中心能够自动删除提供者的信息。
2、当注册中心重启时,能自动恢复注册数据,已经订阅请求
3、当回话过期是,能自动恢复注册数据,已经订阅请求
这里就不具体说zookeeper的搭建了,可以参照我的这篇贫博客:
http://blog.csdn.net/wusd1256/article/details/79292362
看一下dubbo配置的
三、项目运行
上面的环境搭建好了之后,开始运行项目了。首先运行的是服务提供者工程;dubbo-server,这是springboot项目直接运行main方法就可以了。console中出现下面的日志说明,服务者启动成功,并且已经注册到ZK中了。
接下来在运行dubbo-client,最后成功打印出信息,就是通过dubbo服务RPC接口调用获取的。