“看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然。所以,无论什么事情,仔细想一想,都没有什么大不了的。这能帮助自己在遇到挫折时稳定心态,想得更开。” – 《腾讯传》

本文提纲

一、为啥整合 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 ,地址 www.apache.org/dyn/closer.…

解压 ZooKeeper

tarzxvf zookeeper-3.4.8.tar.gz

在 conf 目录新建 zoo.cfg ,照着该目录的 zoo_sample.cfg 配置如下。

cdzookeeper-3.3.6/conf

vim zoo.cfg

zoo.cfg 代码如下(自己指定 log 文件目录):

tickTime=2000

dataDir=/javaee/zookeeper/data

dataLogDir=/javaee/zookeeper/log

clientPort=2181

在 bin 目录下,启动 ZooKeeper:

cdzookeeper-3.3.6/bin

./zkServer.sh start

  1. git clone 下载工程 springboot-learning-example

项目地址见 GitHub –github.com/JeffLi1993/…

git clone git@github.com:JeffLi1993/springboot-learning-example.git

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

cdspringboot-learning-example

mvn cleaninstall

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 beansforJMX 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 ClientApplicationin6.055 seconds (JVM runningfor7.026)

City{id=1, provinceId=2, cityName='温岭', description='是我的故乡'}

最后打印的城市信息,就是通过 Dubbo 服务接口调用获取的。顺利运行成功,下面详解下各个代码及配置。

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

代码都在 GitHub 上,github.com/JeffLi1993/…

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。

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")

publicclassCityDubboServiceImplimplementsCityDubboService {

publicCity findCityByName(String cityName) {

returnnewCity(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

publicclassCityDubboConsumerService {

@Reference(version ="1.0.0")

CityDubboService cityDubboService;

publicvoidprintCity() {

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

publicclassClientApplication {

publicstaticvoidmain(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 项目。

五、欢迎入群交流下方扫码即可!

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

Springboot 整合 Dubbo/ZooKeeper你不知道的那点事,大神必修课相关推荐

  1. SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统

    QUESTIONl:SpringBoot整合Dubbo+Zookeeper进行分布式搭建系统? ANSWER: 一:创建项目模块 1.1.创建一个Empty Project 名称:Dubbo 1.2. ...

  2. 【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper

    1. 准 备 1.1 Dubbo 简介 Apache Dubbo 是一款高性能.轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用.智能容错和 负载均衡.以及服务自动注 ...

  3. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! "看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔 ...

  4. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  5. SpringBoot整合Dubbo Zookeeper

    1.环境准备 (1)软件下载 链接:https://pan.baidu.com/s/1z8ehuDRX7A85jj6AyMA-rg 提取码:hs3s (2)软件启动 cd ~/software/zoo ...

  6. 【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一.Dubbo dubbo基本概念 调用关系说明 二.Dubbo环境搭建 三.Window下安装zookeeper ...

  7. springboot整合dubbo时连接zookeeper——天坑

    本文主要针对使用springboot整合dubbo框架时使用zookeeper作为注册中心,在服务启动连接zookeeper产生的问题做一个详细的讲解. 主要针对两个异常 (1)java.lang.I ...

  8. spring boot 整合Dubbo/Zookeeper

    spring boot 整合Dubbo/Zookeeper 只是一个简单的整合demo,只做思路分析叙述,具体功能不做描述. 一.技术介绍 •ZooKeeper ZooKeeper 是一个分布式的,开 ...

  9. 解决springboot整合dubbo中No provider available from registry 127.0.0.1:2181 for service x.x.x on consumer

    解决springboot整合dubbo中No provider available from registry 127.0.0.1:2181 for service x.x.x on consumer ...

最新文章

  1. 【iOS UI】iOS 9 GUI 资源分享
  2. Antd组件中单选框、复选框自定义样式的优雅实现
  3. HBase总结(十一)hbase Java API 介绍及使用示例
  4. 汽车电子专业知识篇(三)-双目视觉三大应用视觉深度、标定、立体匹配
  5. dynamo python修改多个参数_python之函数
  6. 基于python的文件处理
  7. Redis入门之Redis安装、配置及常用指令
  8. 黄聪:php实现关键词高亮
  9. sap的工作日历_ABAP-有关日期的SAP函数使用(日历)
  10. 手机变Android麦克风,手机变麦克风
  11. [Mac]macOS Mojave 10.14.3安装Java
  12. 《计算机网络教程》(微课版 第五版)第三章 数据链路层 课后习题及答案
  13. 企业邮箱怎么发邮件,又如何进行查询呢?
  14. GLM(广义线性模型) 与 LR(逻辑回归) 详解
  15. css3制作手风琴,CSS3制作手风琴——CSS3 :target的应用
  16. HIDS-ebpf-0
  17. 【定量分析、量化金融与统计学】多元回归模型与回归推理
  18. windows安装(从U盘启动盘)
  19. Java反射面试题(2020)
  20. cmos管宽长比,OC, OD门和线与逻辑,传输门,竞争冒险,三态门

热门文章

  1. Bootstrap公司年会抽奖活动代码
  2. java crs校验_AIX系统学习之-CRS安装后校验
  3. 小程序,修改数组或对象中的值,通过input动态修改数组对象中的值
  4. zblog音频MP3播放器插件
  5. 原生仿微信社交社区即时通讯聊天双端APP源码开源带PC客户端文档说明
  6. php多功能引流工具箱源码
  7. 【新手教程】CE找武林外传基址方法
  8. jQuery弹出层登录和全屏注册表单
  9. 在Ubuntu 13.10 下安装支持SSL的Apache
  10. Linux 最基本命令应用