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 ...
随机推荐
- 分布式架构下,session共享有什么方案么?
分布式架构下,session共享有什么方案么? 会点代码的大叔 科技领域创作者 分布式架构下的session共享,也可以称作分布式session一致性:关于这个问题,和大家说一说解决方案(如果有其他的 ...
- Spring Bean装配详解(五)
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
- 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)
4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...
- 怎样通过混入(Mixin)实现多继承
js不提供现成的多重继承的方法, 但可以通过Object.assign()来手动实现: function Father1(name){ this.name = name; } function Fat ...
- 国际化(i18n)学习
一 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization)又称 ...
- 简单标签(SimpleTag) 学习
一.由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口 ...
- Myeclipse debug 调式java 报错,留做后面解决!
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT( ...
- 动手实现CNN卷积神经网络
数据集采用的是手写数据集(http://yann.lecun.com/exdb/mnist/): 本文构建的CNN网络图如下: 像素点:28*28 = 784,55000张手写数字图片. # -*- ...
- [NOIP2018模拟赛10.18]自闭报告
闲扯 这一天,菜鸡RyeCatcher又想起来了被毒瘤题支配的恐惧 今天比较好玩,还是ljy提醒才发现文件夹里有题面...不知道外面的人什么时候才发现 看完了题面,又回到了雅礼啥题也不会写的感觉 T1 ...
- docker系列七之Dockerfile
Dockerfile 一. Dockerfile是什么 Dockerfile是docker中镜像文件的的描述文件,说的直白点就是镜像文件到底是由什么东西一步步构成的.例如我们在淘宝上买了一件商品, ...