`

Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

阅读更多
本文提纲
一、为啥整合 Dubbo 实现 SOA
二、运行 springboot-dubbo-server 和 springboot-dubbo-client 工程
三、springboot-dubbo-server 和 springboot-dubbo-client 工程配置详解
 

一、为啥整合 Dubbo 实现 SOA

Dubbo 不单单只是高性能的 RPC 调用框架,更是 SOA 服务治理的一种方案。
核心
1. 远程通信,向本地调用一样调用远程方法。
2. 集群容错
3. 服务自动发现和注册,可平滑添加或者删除服务提供者。
 
我们常常使用 Springboot 暴露 HTTP 服务,并走 JSON 模式。但慢慢量大了,一种 SOA 的治理方案。这样可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 调用。下面我们详解下如何集成 Dubbo。
 

二、运行 springboot-dubbo-server 和 springboot-dubbo-client 工程

运行环境:JDK 7 或 8,Maven 3.0+
技术栈:SpringBoot 1.5+、Dubbo 2.5+、ZooKeeper 3.3+

 

 
1.ZooKeeper 服务注册中心
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
下载 ZooKeeper ,地址 http://www.apache.org/dyn/closer.cgi/zookeeper
 
解压 ZooKeeper
 
tar zxvf zookeeper-3.4.8.tar.gz
 
在 conf 目录新建 zoo.cfg ,照着该目录的 zoo_sample.cfg 配置如下。
 
cd zookeeper-3.3.6/conf
vim zoo.cfg
 
zoo.cfg 代码如下(自己指定 log 文件目录):
 
tickTime=2000
dataDir=/javaee/zookeeper/data 
dataLogDir=/javaee/zookeeper/log
clientPort=2181
 
在 bin 目录下,启动 ZooKeeper:
 
cd zookeeper-3.3.6/bin
./zkServer.sh start
 
2. git clone 下载工程 springboot-learning-example
git clone git@github.com:JeffLi1993/springboot-learning-example.git
 

然后,Maven 编译安装这个工程:

cd springboot-learning-example
mvn clean install
 
 
3.运行 springboot-dubbo-server Dubbo 服务提供者工程
右键运行 springboot-dubbo-server 工程 ServerApplication 应用启动类的 main 函数。Console 中出现如下表示项目启动成功:
这里表示 Dubbo 服务已经启动成功,并注册到 ZK (ZooKeeper)中。
 
 
4.运行 springboot-dubbo-client Dubbo 服务消费者工程

右键运行 springboot-dubbo-client 工程 ClientApplication 应用启动类的 main 函数。Console 中出现如下:

...
2017-03-01 16:31:38.473  INFO 9896 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2017-03-01 16:31:38.538  INFO 9896 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
2017-03-01 16:31:38.547  INFO 9896 --- [           main] org.spring.springboot.ClientApplication  : Started ClientApplication in 6.055 seconds (JVM running for 7.026)
City{id=1, provinceId=2, cityName='温岭', description='是我的故乡'}
 
最后打印的城市信息,就是通过 Dubbo 服务接口调用获取的。顺利运行成功,下面详解下各个代码及配置。
 
 

三、springboot-dubbo-server 和 springboot-dubbo-client 工程配置详解

 
1.详解 springboot-dubbo-server Dubbo 服务提供者工程
springboot-dubbo-server 工程目录结构
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── spring
        │           └── springboot
        │               ├── ServerApplication.java
        │               ├── domain
        │               │   └── City.java
        │               └── dubbo
        │                   ├── CityDubboService.java
        │                   └── impl
        │                       └── CityDubboServiceImpl.java
        └── resources
            └── application.properties
 
 
a.pom.xml 配置

pom.xml 中依赖了 spring-boot-starter-dubbo 工程,该项目地址是 https://github.com/teaey/spring-boot-starter-dubbo。pom.xml 配置如下

<?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>springboot</groupId>
<artifactId>springboot-dubbo-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-dubbo 服务端:: 整合 Dubbo/ZooKeeper 详解 SOA 案例</name>

<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>

<properties>
<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>
</dependencies>
</project>
 
 

b.application.properties 配置

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=org.spring.springboot.dubbo
 
 
这里 ZK 配置的地址和端口,就是上面本机搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解释如下:
spring.dubbo.application.name 应用名称
spring.dubbo.registry.address 注册中心地址
spring.dubbo.protocol.name 协议名称
spring.dubbo.protocol.port 协议端口
spring.dubbo.scan dubbo 服务类包目录
 
c.CityDubboServiceImpl.java 城市业务 Dubbo 服务层实现层类
 
// 注册为 Dubbo 服务
@Service(version = "1.0.0")
public class CityDubboServiceImpl implements CityDubboService {

    public City findCityByName(String cityName) {
        return new City(1L,2L,"温岭","是我的故乡");
    }
}
 
@Service 注解标识为 Dubbo 服务,并通过 version 指定了版本号。
 
d.City.java 城市实体类
实体类通过 Dubbo 服务之间 RPC 调用,则需要实现序列化接口。最好指定下 serialVersionUID 值。
 
2.详解 springboot-dubbo-client Dubbo 服务消费者工程
springboot-dubbo-client 工程目录结构
 
├── pom.xml
└── src
    └── main
        ├── java
        │   └── org
        │       └── spring
        │           └── springboot
        │               ├── ClientApplication.java
        │               ├── domain
        │               │   └── City.java
        │               └── dubbo
        │                   ├── CityDubboConsumerService.java
        │                   └── CityDubboService.java
        └── resources
            └── application.properties
 
pom.xml 、 CityDubboService.java、City.java 没有改动。Dubbo 消费者通过引入接口实现 Dubbo 接口的调用。
 
a.application.properties 配置
 
## 避免和 server 工程端口冲突
server.port=8081

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=org.spring.springboot.dubbo
 
因为 springboot-dubbo-server 工程启动占用了 8080 端口,所以这边设置端口为 8081。
 
b.CityDubboConsumerService.java 城市 Dubbo 服务消费者
 
@Component
public class CityDubboConsumerService {

    @Reference(version = "1.0.0")
    CityDubboService cityDubboService;

    public void printCity() {
        String cityName="温岭";
        City city = cityDubboService.findCityByName(cityName);
        System.out.println(city.toString());
    }
}
@Reference(version = “1.0.0”) 通过该注解,订阅该接口版本为 1.0.0 的 Dubbo 服务。
这里将 CityDubboConsumerService 注入 Spring 容器,是为了更方便的获取该 Bean,然后验证这个 Dubbo 调用是否成功。
 
c.ClientApplication.java 客户端启动类
 
@SpringBootApplication
public class ClientApplication {

    public static void main(String[] args) {
        // 程序启动入口
        // 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
        ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args);
        CityDubboConsumerService cityService = run.getBean(CityDubboConsumerService.class);
        cityService.printCity();
    }
}
解释下这段逻辑,就是启动后从 Bean 容器中获取城市 Dubbo 服务消费者 Bean。然后调用该 Bean 方法去验证 Dubbo 调用是否成功。
 

四、小结

还有涉及到服务的监控,治理。这本质上和 SpringBoot 无关,所以这边不做一一介绍。感谢阿里 teaey 提供的 starter-dubbo 项目。
 
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
分享到:
评论

相关推荐

    Springboot 整合 Dubbo/ZooKeeper 实现 SOA 案例解析

    SpringBoot 整合 Dubbo 和 ZooKeeper 是为了构建一个高效的微服务架构,实现 Service-Oriented Architecture (SOA) 案例。Dubbo 是一个高性能的 RPC (Remote Procedure Call) 框架,旨在提高服务间的通信效率,使得...

    springboot+dubbo.rar

    《SpringBoot整合Dubbo构建分布式系统详解》 在IT行业中,SpringBoot和Dubbo是两个极为重要的组件,它们分别在微服务和分布式服务治理领域扮演着核心角色。本篇文章将深入探讨如何使用SpringBoot集成Dubbo,搭建一...

    springboot快速入门

    Web 案例,Spring Boot 注解实现整合 Redis 作为缓存,Spring Boot HTTP over JSON 的错误码异常处理,Spring Boot Dubbo applications.properties 配置清单,Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例..........

    Dubbo监控系统配置

    ### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo提供了包括服务自动注册与发现、...

    Dubbo入门_实战

    ### Dubbo入门实战详解 #### 一、Dubbo概述与应用场景 ##### 1.1 什么是Dubbo? Dubbo是一款由阿里巴巴开发的分布式服务框架,它致力于提供高性能和透明化的RPC远程服务调用方案。该框架是阿里巴巴SOA服务化治理...

    dubbo的简单实现

    - 关键技术:SOA(面向服务的架构),例如Dubbo,通过集中化的管理机制实现了资源的有效利用。 #### Dubbo架构详解 Dubbo采用了典型的RPC架构,主要包括以下几个组成部分: - **Provider**:即服务提供者,负责...

    dubbo中文文档说明

    **Dubbo** 是阿里巴巴开源的一款面向服务架构(SOA)的高性能微服务框架。它主要用于构建基于Java的应用程序,帮助开发者更容易地构建、部署和管理分布式应用。Dubbo的核心功能包括服务的发布与订阅、服务调用、负载...

    dubbo用户手册pdf中文版

    综上所述,《Dubbo用户手册PDF中文版》不仅全面介绍了Dubbo的理论知识,还提供了丰富的实战案例,是学习和使用Dubbo的宝贵资源。配合提供的源码,读者可以更直观地理解Dubbo的工作原理,从而更好地运用到实际项目中...

    基于dubbo的消费方完整项目示例

    本项目"**dubbo-soa-consumer**"是一个全面展示如何在实际开发中构建Dubbo消费方(Consumer)的实例,旨在帮助开发者理解和掌握Dubbo Consumer端的配置和调用方法。 首先,我们需要理解Dubbo的基本架构。Dubbo由...

    dubbo学习视频

    基础,高级,架构,简易支付”等描述,我们可以推断出这份资料涵盖了Dubbo框架的基础到高级应用的全面内容,包括但不限于Dubbo的基本概念、核心功能、系统架构以及在实际项目中的应用案例等。下面将针对这些方面进行...

    Dubbo面试题(2022最新版)

    ### Dubbo面试题详解 #### 一、基础知识 1. **为什么要用Dubbo?** 随着企业级应用的复杂度不断提高,服务数量急剧增多,服务间的调用关系日益复杂,传统的单体架构已经难以满足高可用、可扩展的需求。因此,...

    dubbo文档-2017-11-1

    《Dubbo技术详解》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java服务治理框架,自2017年11月1日以来,一直在业界保持着广泛的影响力。其核心设计目标是倡导面向服务的架构(SOA),提供简单易用的API,帮助...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【Dubbo】dubbo运行时,突然所有的zookeeper全部宕机,dubbo是否还会继续提供服务. 169 【Dubbo】dubbo服务是阻塞的吗? 170 【Dubbo】dubbo 默认协议 170 【Dubbo】dubbo注册中心zookeeper支持的功能 171 【Dubbo】...

    应聘Java工程师-3年工作经验-张xx-南昌大学-1----0_嵌入式_java简历_程序员简历模板_计算机相关专业.doc

    - 在线商城项目中,他利用SOA和分布式架构解决了高并发问题,通过Redis和Solr提升系统性能,使用FastDFS存储大量图片,Dubbo和Zookeeper实现服务注册与发现,ActiveMQ处理消息通信,单点登录系统增强了安全性。...

    应聘Java工程师_java简历.doc

    - 在线商城项目中,他参与了购物车、订单、搜索和单点登录等关键模块的开发,使用了SOA分布式架构、Dubbo服务、Redis缓存、Solr搜索、Nginx负载均衡和Zookeeper服务注册。通过这些技术,项目实现了高可用性和高并发...

    Java思维导图xmind文件+导出图片

    主流架构模型-SOA架构和微服务架构 领域驱动设计及业务驱动规划 分布式架构的基本理论CAP、BASE以及其应用 什么是分布式架构下的高可用设计 构架高性能的分布式架构 构建分布式架构最重要因素 CDN静态文件...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户网站介绍&商城首页搭建&内容系统创建&CMS实现 day05_首页轮播图显示实现,Redis环境搭建,Redis实现缓存 day06_solr索引库...

    利用分布式搭建网上购物商城最详解

    - **Zookeeper**:分布式协调服务,主要用于解决分布式环境中的共享数据管理问题。 - **JDK**:Java Development Kit,是开发Java应用程序的基础工具包。 - **Tomcat**:Apache Tomcat是一款免费开源的Servlet容器,...

    2021版本Java程序月薪30k简历模板.docx

    - 熟悉SOA(面向服务架构)、分布式、微服务和服务网格的概念,以及RPC(远程过程调用)框架如Dubbo、Dubbox和SpringCloud的相关组件,这反映了他在分布式系统开发中的专业知识。 9. **服务治理**: - 对Eureka和...

    淘淘商城面试总结文档

    - **SOA架构**: 遵循面向服务的架构设计原则,提高了系统的灵活性和可扩展性。 - **Dubbo**: 作为一个分布式服务框架,Dubbo提供了高效的服务调用机制和服务治理能力,包括服务发布、服务发现、负载均衡等。 - **...

Global site tag (gtag.js) - Google Analytics