Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战
1. Dubbo简介
Dubbo是Alibaba开源的分布式框架,是RPC模式的一种成熟的框架,优点是可以与Spring无缝集成,应用到我们的后台程序中。具体介绍可以查看Dubbo官网。
2. Why Dubbo
- 项目服务化后,项目之间的高性能通讯问题。(项目被拆分成多个服务模块后必然会涉及模块之间的通讯)。在应用Dubbo后,在项目中可以像调用本地方法一样调用远程方法。
- 利用ZooKeeper服务,可以使服务消费方能动态的查找服务提供方,使地址透明。
- 每个服务提供方相当于一个单独的项目,使我们的主项目代码量减少,方便维护。
3. 搭建项目
经过多次尝试,最终选出了一套比较完美的方案,实现了消费方与提供方分离,并同时注册到zookeeper中,使消费方调用提供方的接口。在实际应用中,消费方是我们已经在开发的项目,而服务方是我们新建的项目,提供了几个相对独立而又复杂的接口。如下:
1)定义服务接口
这一步需要我们新建一个新的项目,其中包含了我们需要的接口名称,不需要实现。目的是承接消费方与服务方,实现二者分离。
首先,我们新建一个Gradle项目,注意不要使用Spring Initializr创建项目,这样会使得接口不能被调用!

一般来说,第一次创建好的Gradle项目会没有src路径,需要我们用gradle命令来生成。我们在build.gradle文件中加入以下命令
task "create-dirs" << {
sourceSets*.java.srcDirs*.each {
it.mkdirs()
}
sourceSets*.resources.srcDirs*.each{
it.midirs()
}
}
在右侧gradle插件中会自动生成create-dirs命令:

执行命令后便可生成src路径,然后建议重启项目。
接下来是创建接口,注意要先在src中新建一个包,再在包中创建接口。

之后利用gradle的打包功能,将服务打包备用。
2)服务提供方
服务提供方是我们实现独立功能的项目。我们新建一个Spring项目。首先将上一步打好的包引入这个项目:
- 在根目录中新建名为lib的包,并将jar包粘贴到这个包中,如下:

- 在build.gradle中引入这个包:在dependencies{ }中添加 compile files('lib/server-1.0.jar')
然后添加dubbo依赖。在Maven公共仓库中有许多dubbo的依赖,不乏包括apache和alibaba等很多名字花里胡哨的依赖,但经过尝试,大多数都半途而废,最终找到一个能用的依赖!
compile group: 'com.gitee.reger', name: 'spring-boot-starter-dubbo', version: '1.1.1'
注意,只需要额外添加这一条依赖,dubbo已经实现了注册zookeeper功能。
下一步是实现接口:

请忽略上图中的hanlp.properties配置文件。
这里需要注意的是@Service是使用dubbo依赖中的注解。而实现类我这里是调用了Hanlp汉语言处理包实现了输入内容的语义识别,读者练习的时候可以直接return "Hello";
最后一步是添加配置,将application.properties配置文件修改为application.yml,添加如下配置:
spring:
dubbo:
application:
name: demo-provider
base-package: hanlp.hanlp.service # dubbo服务发布者所在的包,注意根据实际情况修改这个路径
registry:
protocol: zookeeper
address: 127.0.0.1
port: 2181
protocol:
name: dubbo
serialization: hessian2
provider:
retries: 0
server:
port: 8088
到这一步项目还不能跑起来,因为我们还没有启动zookeeper服务,下面我们安装zookeeper。
3)zookeeper安装配置
这一步比较简单,因为答主在开发的项目是在linux中运行的,所以分别说明一下zookeeper在windows和linux上的安装配置. zookeeper下载地址
- windows下安装步骤: 请参考 https://blog.csdn.net/weixin_37715446/article/details/78642052
- linux下安装步骤:请参考 https://www.cnblogs.com/onetwo/p/6420066.html
在启动zookeeper服务后,便能启动服务提供方的项目了。查看项目启动日志,看最后几行:

同时再查看zkServer日志:

说明项目已经成功注册到zookeeper服务中,接下来我们要用消费方去调用服务方的接口。这时候可以在选择一个正在开发中项目作为消费方,这里为了演示,我们新建一个spring项目。
4)消费方
创建好项目后,同样需要将第一步中打好的包引入这个项目,再添加dubbo的依赖,操作与第二步相同。有区别的地方是配置不尽相同:
spring:
dubbo:
application:
name: demo-consumer
base-package: hanlp.search.controller #这里需要根据情况修改
registry:
protocol: zookeeper
address: 127.0.0.1
port:
protocol:
name: dubbo
server:
port:
我们创建一个controller来展示接口的调用情况:

在上面使用@Inject注解来引入服务,消费方会自动从zookeeper中取出对应的服务。
启动项目!查看日志发现消费方也注册到zookeeper中。我们在浏览器中访问三次消费方controller的接口:



可以看到返回的内容是Hanlp包识别的结果,说明消费方已经能成功调用服务方的接口,而对于消费方来说,感觉上是在调用本地的方法一样,感受到了RPC服务的魅力。
至此,dubbo服务搭建完成!后续再慢慢学习它的高级用法。
Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战的更多相关文章
- spring boot +dubbo+zookeeper
dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 结合本公司的开发也是用的dubbo这款优秀的框架,加上 最近工作重心的.所以对于dubbo的 ...
- spring boot 集成 zookeeper 搭建微服务架构
PRC原理 RPC 远程过程调用(Remote Procedure Call) 一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远程系统资源,R ...
- spring boot +dubbo 踩坑记录
今天初次搭建spring boot +duboo的demo.记录一下踩坑记录. 首先搭建3个小demo,一个maven项目,两个spring boot (服务提供者和服务消费者)项目. 两 sprin ...
- Spring Boot Dubbo applications.properties 配置清单
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习.Innovate ,And out execute ! 』 本文 ...
- Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)
原文:https://blog.csdn.net/hubo_88/article/details/80671192 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它 ...
- spring boot 开发环境搭建(Eclipse)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- SpringBoot + Dubbo + zookeeper 搭建简单分布式服务
SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot
- Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。
系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...
- Spring Boot入门-快速搭建web项目
Spring Boot 概述: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...
随机推荐
- centos 防火墙相关命令
防火墙关闭: systemctl stop firewalld systemctl disable firewalld 重启防火墙: systemctl enable firewalld system ...
- 【转载】【最短路Floyd+KM 最佳匹配】hdu 2448 Mining Station on the Sea
Mining Station on the Sea Problem Description The ocean is a treasure house of resources and the dev ...
- MarkdownPad2安装与破解-转载
MarkdownPad安装包下载链接链接:https://pan.baidu.com/s/1o7c4W7C2d8zCPh5z7y4IvQ提取码:e4bf 下载解压之后,找要MarkdownPad2.e ...
- vue 集成 NEditor 富文本
下载NEditor 放在 vue 项目下面 public 文件中. 安装 vue-neditor-wrap 执行命令 npm install vue-neditor-wrap 代码使用 ...
- ASP.NET Core 入门(1)(搭建环境CentOS)
一.CentOS 7 安装 下载CentOS http://isoredirect.centos.org/centos/7/isos/x86_64/ 选择其中下载即可. 下载完成后打开vmware准 ...
- SQLAlchemy 在查询期间丢失与MySQL服务器的连接
遇到问题 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') 建立的 pymysq ...
- POJ1484(Blowing Fuses)--简单模拟
题目链接:http://poj.org/problem?id=1484 这题直接简单模拟即可.给你n个容器,m个操作,最大容量C.模拟每一个对器件的开关操作.如果原来是关闭的,则打开,同时最大功耗加上 ...
- springboot启动流程(十一)aop切面处理过程
所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 正文 spring的两大核心就是ioc和aop.在关于ioc依赖注入的文章中,我们了解了如何根 ...
- 借助Spring工具类如何实现支持数据嵌套的赋值操作
假设有两个Bean A和B,想将B中的属性赋值到A实体中,可以使用get set来实现,当属性过多时,就会显得很冗余,可以使用spring提供的BeanUtils.copyProperties()来实 ...
- 1.关于OSI七层模型和两主机传输过程
先回顾一下OSI七层模型有啥内容 (OSI模型与TCP/IP模型类似,这里只针对OSI模型展开) OSI参考模型为什么弃用呢?它的分层过于细致了,以至于使网络的体系结构变得复杂臃肿,有使用重叠的嫌疑, ...