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下载地址

      在启动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项目的消费端与服务端分离实战的更多相关文章

  1. spring boot +dubbo+zookeeper

    dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 结合本公司的开发也是用的dubbo这款优秀的框架,加上 最近工作重心的.所以对于dubbo的 ...

  2. spring boot 集成 zookeeper 搭建微服务架构

    PRC原理 RPC 远程过程调用(Remote Procedure Call) 一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远程系统资源,R ...

  3. spring boot +dubbo 踩坑记录

    今天初次搭建spring boot +duboo的demo.记录一下踩坑记录. 首先搭建3个小demo,一个maven项目,两个spring boot (服务提供者和服务消费者)项目. 两 sprin ...

  4. Spring Boot Dubbo applications.properties 配置清单

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 与其纠结,不如行动学习.Innovate ,And out execute ! 』 本文 ...

  5. Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)

    原文:https://blog.csdn.net/hubo_88/article/details/80671192 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它 ...

  6. spring boot 开发环境搭建(Eclipse)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  7. SpringBoot + Dubbo + zookeeper 搭建简单分布式服务

    SpringBoot + Dubbo + zookeeper 搭建简单分布式服务 详细操作及源码见: https://github.com/BillyYangOne/dubbo-springboot

  8. Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  9. Spring Boot入门-快速搭建web项目

    Spring Boot 概述: Spring Boot makes it easy to create stand-alone, production-grade Spring based Appli ...

随机推荐

  1. python爬虫框架scrapy 豆瓣实战

    Scrapy 官方介绍是 An open source and collaborative framework for extracting the data you need from websit ...

  2. Go语言学习笔记(7)——函数和方法

    Go语言中同时有函数和方法! 函数: go程序必须要包含一个main函数.main函数不能有任何参数和返回值! 1. 定义方法示例: func max(num1, num2 int) int { // ...

  3. (二)发布第一个WebService服务与DSWL文档解析

    1. 编写接口 package service; import javax.jws.WebService; /** * 第一个webservice服务, * @WebService注解表示这是一个we ...

  4. asp.net类似于js中的setTimeOut()的函数作用?

    asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...

  5. ES 6 日期util.js =>

    微信小程序demo const formatTime = date => { const year = date.getFullYear() const month = date.getMont ...

  6. cmd查找端口占用情况

    查找端口占用情况:netstat -ano|findstr 4848 查看使用指定端口的应用程序:tasklist|findstr xxxx,xxxx指的是pid 结束指定进程:taskkill /p ...

  7. vue购物车动画效果

    使用动画的三个函数 v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:after-enter=&q ...

  8. JS做2048

    首先我们了解一下2048这个游戏的原理: 他由一个4x4二维数组组成,在游戏一开始时候在随机位置随机生成一个2或者4 如: 1.每点击一次开始就刷新一次游戏界面: 2.通过键盘的上下左右四个方向键分别 ...

  9. 解决window 12 service 不能调用excel ,报"System.Runtime.InteropServices.COMException (0x800A03EC)

    Step1: 运行comexp.msc -32 注意因为excel 是32 位的,所以这里用的32位的操作, 如用64位的操作命令:dcomcnfg.exe,将找不到excel com 进入compo ...

  10. C++ 获取对象类型

    在入门C++过程中,我们经常会遇到无法判断对象类型的情况. 头文件( VS编译器 ) #include <typeinfo> typeid(对象).name(); 例子: , &b ...