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. Feign【替换默认的feign client】

    说明: feign默认情况下使用的是JDK原始的URLConnection发送的HTTP请求,没有使用到连接池,但是对每个地址会保持长连接,即HTTP的persistence connection.我 ...

  2. Vue CLI 3开发中屏蔽的EsLint错误 (.eslintrc.js 在vue3+中 修改这个)

    1.关闭eslint校验有了eslint的校验,可以来规范开发人员的代码,是挺好的.但是有些像缩进.空格.空白行之类的规范,在开发过程中一直报错,未免太过于苛刻了.所以,我还是会选择关闭eslint校 ...

  3. Sonya and Bitwise OR CodeForces - 1004F (线段树,分治)

    大意: 给定序列$a$, 给定整数$x$. 两种操作(1)单点修改 (2)给定区间$[l,r]$,求有多少子区间满足位或和不少于$x$. 假设不带修改. 固定右端点, 合法区间关于左端点单调的. 可以 ...

  4. (十四)Activitivi5之个人任务分配

    一.个人任务分配 1.1 方式一:直接流程图配置中写死: 1.2 方式二:使用流程变量 我们在启动流程的时候设置流程变量即可 /** * 启动流程实例 */ @Test public void sta ...

  5. (四)XML基础(客户端和服务端发送与接收xml数据)

    案例: index.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

  6. T4模板使用笔记

    路径获取 ① 获取当前解决方案路径 string solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)"); ...

  7. log4j2.xml配置,导致启动报错

    项目中遇到问题,当使用tomcat启动时,没问题:当使用内置tomcat启动时却报错,找不到日志路径. 变量位置: <properties> <property name=" ...

  8. Go part 3 指针,栈与堆

    指针类型 要明白指针,需要知道几个概念:指针地址,指针类型 和 指针取值 取指针地址 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置,使用 & 放在变量前面进行“取指针地址”操 ...

  9. JavaScript--Function对象(函数)的声明和作用域

    Funtion 封装了可重复使用的代码块对象,函数名是一个引用函数对象的变量 声明提前:在程序开始执行之前,将var 变量和function函数提前声明 但赋值并不会提前 它的三种创建方法: 创建1 ...

  10. CAS单点登录相关配置

    一.CAS单点登录服务端的部署 部署 把CAS所对应的war包部署到tomcat中 4.品优购资源V1.3\配套软件\配套软件\CAS\cas.war 配置 更改tomcat的端口号 <Conn ...