之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程序猿来说,真是一个好消息。最近有时间了,打算做一个demo把dubbo在本地跑起来先。

先copy一段dubbo的介绍哈!DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点(其他的详细介绍可以查看dubbo的官网地址dubbo,写的很详细哒!)。

该demo是基于maven搭建的,项目架构基于SpringMVC,这里忽略Spring的基本配置,着重介绍下dubbo部分的配置,以及dubbo后台管理系统

一、软件环境 
1、zookeeper 
下载地址:https://zookeeper.apache.org/releases.html 下载最新版的zookeeper,我这里使用的版本是 zookeeper-3.4.8(当前最新版3.5.1) 
2、springMVC (maven方式引入) 
3、dubbo (maven方式引入)

二、项目搭建 
这里我搭建了三个项目,分别为dubbo-api,dubbo-controller,dubbo-service 
dubbo-api:主要是接口定义,供controller调用,以及service层去实现该接口,分离这一层的好处就是前段项目调用接口时候,直接调用dubbo-api的接口即可,不需要关注后端如何实现;而service层来具体实现该接口,进行业务逻辑处理,不需要关注 controller层如何调用。 
dubbo-controller:主要controller层控制跳转等。 
dubbo-service:主要是service实现,结合数据层实现后端业务逻辑处理。

项目搭建完成之后,的结构图如下: 

三、项目配置 
1、dubbo-api 
新建TestService接口类

package com.dubbo.service;public interface TestService {/*** 测试发消息* @param name* @return*/public String sayHello(String name);}

pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubbo</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>dubbo-api</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>

注意: 这个项目最终打包成jar文件,直接maven引入到另外两个项目中

2、dubbo-controller 
新建MyController类

package com.dubbo.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import com.dubbo.service.TestService;/*** controller* @author hwy**/
@Controller
public class MyController {@Autowiredprivate TestService testService;@RequestMapping(value = "/test")@ResponseBodypublic String testSay(@RequestParam(value = "name",defaultValue = "") String name){StringBuffer sb = new StringBuffer();sb.append("Dubbo: ").append(testService.sayHello(name));return sb.toString();}}

新建dubbo-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd  http://code.alibabatech.com/schema/dubbo  http://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="test_consumer" /><!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry address="zookeeper://192.168.2.193:2181" /><!-- 声明需要暴露的服务接口 --><dubbo:reference interface="com.dubbo.service.TestService" id="testService" check="false" /></beans>

注意:这里作为消费者名称为test_consumer,注释很详细,就不一一介绍了,这个项目最终打包成dubbo-service.war放在tomcat或其他容器中运行。

pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubbo</groupId><artifactId>dubbo-controller</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>dubbo-contoller</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><org.springframework.version>3.1.4.RELEASE</org.springframework.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${org.springframework.version}</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-core-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.12</version></dependency><dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><classifier>jdk15</classifier></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.3.6</version><exclusions><exclusion><groupId>log4j</groupId><artifactId>log4j</artifactId></exclusion></exclusions></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>com.dubbo</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><finalName>dubbo-controller</finalName></build>
</project>

3、dubbo-service 
新建TestServiceImpl类

package com.dubbo.service.impl;import com.dubbo.service.TestService;/*** service impl* @author hwy**/
public class TestServiceImpl implements TestService{public String sayHello(String name) {return name + " service2 say hello word service2!";}}

新建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://code.alibabatech.com/schema/dubbohttp://code.alibabatech.com/schema/dubbo/dubbo.xsd"><!-- 提供方应用信息,用于计算依赖关系 --><dubbo:application name="test_provider" /><!-- 使用zookeeper注册中心暴露服务地址 --><dubbo:registry address="zookeeper://192.168.2.193:2181" /><!-- 用dubbo协议在20880端口暴露服务 --><dubbo:protocol name="dubbo" port="20880" /><!-- 声明需要暴露的服务接口 --><dubbo:service interface="com.dubbo.service.TestService" ref="testService" /><!-- 具体的实现bean --><bean id="testService" class="com.dubbo.service.impl.TestServiceImpl" />
</beans>

注意:这里作为服务提供者名称为test_provider,注释很详细,就不一一介绍了,这个项目最终打包成dubbo-service.war放在tomcat或其他容器中运行,跟其他直接通过ClassPathXmlApplicationContext 启动方式稍微有点区别。

pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.dubbo</groupId><artifactId>dubbo-service</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>dubbo-service Maven Webapp</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.vesion>3.1.4.RELEASE</spring.vesion></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version><exclusions><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-asm</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-instrument-tomcat</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.9</version></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.5.3</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc-portlet</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-struts</artifactId><version>${spring.vesion}</version></dependency><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><dependency><groupId>com.dubbo</groupId><artifactId>dubbo-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><finalName>dubbo-service</finalName></build>
</project>

好了,经过这么配置之后,我们的项目编码配置部分就大功告成了!

maven编译下三个项目,将dubbo-controller和dubbo-service放到tomcat容器中,启动tomcat容器! 出错啦! 为啥容器不起来!那是因为我们还少了主要的一步,那就是配置启动zookeeper,不然dubbo去zookeeper注册中心暴露服务地址不成功啦!

四、配置启动zookeeper 
将下载的zookeeper压缩包,解压到一个磁盘目录上去,这里我指定的位置:D:\hwy\zookeeper-3.4.8,我们可以通过启动D:\hwy\zookeeper-3.4.8\bin\zkServer.cmd直接启动默认配置,默认端口为2181,当然我们也可以指定其他的配置,打开D:\hwy\zookeeper-3.4.8\conf\zoo.cfg,这个是zookeeper配置文件的位置,我们这里在指定一下数据目录以及数据日志目录

dataDir=D:\\hwy\\www\\zookeeper\\data
dataLogDir=D:\\hwy\\www\\zookeeper\\log
  • 1
  • 2

启动zookeeper!

再次启动tomcat容器,是不是就成功啦!我们来访问下http://127.0.0.1:8090/dubbo-controller/test?name=hwy,看下返回结果是不是正确啦! 

好啦!经过上边的一系列操作,一个Maven+SpringMVC+Dubbo 的demo就配置完成了,但是我们如果管理这些服务提供者以及消费者呢?当然,dubbo给我们提供了现成的后台管理网站,专门管理这些服务,应用,路由规则,动态配置,访问控制、权重控制、负载均衡等等,还可以查看系统日志,系统状态,系统环境等等,功能很是强大,通过这个后台,可以可视化控制你的服务和应用。

接下来我们来简单的看看后台系统,以及简单修改下权重控制啥的看看效果吧!我们将dubbo-admin-2.5.3.war包放到tomcat容器中,启动tomcat容器,访问http://127.0.0.1:8080/dubbo-admin-2.5.3

一、登录 

注意:用户名和密码默认为root,当然为了安全起见,线上必须更改这个用户名和密码,

二、首页 

注意:我们看到红色区域,里面显示 服务数:1 应用数:2 提供者数:1 消费者数:1 。 
这就是刚刚我们启动的那个服务1(com.dubbo.service.TestService服务),应用2(test_consumer,test_provider),提供者1(192.168.2.193:20880) 消费者1(192.168.2.193),分别来张截图看看: 
1、服务 

2、应用 

3、提供者 

4、消费者 

看看,是不是很直观的看到刚刚我们启动的服务,应用,提供者及消费者信息,这里,我们在演示下里面的功能之一权重调节功能,给不同的服务提供者分配不同的权限,看下消费者消费提供者的次数的变化。

为了达到演示效果,我将dubbo-service项目在复制一份放到tomcat里面去,并将TestServiceImpl类修改下sayHello()方法,并修改dubbo暴露端口号,通过输出不同信息,判断消费者调用哪个服务提供者提供的服务。

package com.dubbo.service.impl;import com.dubbo.service.TestService;/*** service impl* @author hwy**/
public class TestServiceImpl implements TestService{public String sayHello(String name) {return name + " say hello word!";}}

接着,我们在修改下dubbo的暴漏端口号,修改applicationContext.xml里面的

<dubbo:protocol name="dubbo" port="20881" />
  • 1

好了,我们在重新启动tomcat,继续访问http://127.0.0.1:8080/dubbo-admin-2.5.3,我们能看到提供者里面,已经有我们刚新加的192.168.2.193:20881服务提供者啦! 

这个时候我们在访问http://127.0.0.1:8090/dubbo-controller/test?name=hwy,当我们刷新时,返回的结果中除了上面截图返回的结果,也会返回刚新修改的返回结果,而且多刷新几次,两种结果出现的几率是一样哒!因为这里的提供者权重是一样的。

现在,我们修改这2个提供者的权重,我们让192.168.2.193:20881的权重降一半即50,另一个192.168.2.193:20880提高到200,我们在来刷新多次,看下返回的两种结果出现的几率是不是1:4。亲测,是哒!!!

好了,上边只是简单介绍了这个后台管理系统,里面还有很多很强大的功能,我也暂时还没完全玩转,大家一起尝试下,分享下吧!

dubbo是一个很强大的分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,我用到的只是冰山一角,他的更多功能,大家一起研究下吧!这次分享就到这吧! 打字打的手疼啦!O(∩_∩)O哈哈~

最后参考资料: 
dubbo用户指南 
dubbo开发者指南 
dubbo源码

demo项目源码已上传到download 
demo项目源码地址:源码

Maven+SpringMVC+Dubbo 简单的入门demo配置(另一篇)相关推荐

  1. Maven+SpringMVC+Dubbo+zookeeper 简单的入门demo配置

    参考:http://blog.csdn.net/aixiaoyang168/article/details/51362675 dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调 ...

  2. maven+springmvc+dubbo+zookeeper

    为什么要用dubbo? 还是让官方来解释吧: http://dubbo.io/User+Guide-zh.htm   http://dubbo.io/ 一般 nginx+tomcat | ----&g ...

  3. C++ 高性能计算之多线程简单基础入门教程

    C/C++ 高性能计算之多线程简单基础入门教程 比起别人的盲目罗列函数接口,鹦鹉学舌式的解释每一个输入参数和输出参数,一味求全而无重点,我的文章更侧重于入门知识的讲解,宁缺毋滥,只有一些最简单的入门用 ...

  4. 服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)

    服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置) 原文:服务网关Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置) [前言] ...

  5. Dubbo入门Demo

    2019独角兽企业重金招聘Python工程师标准>>> 1.Dubbo简单介绍 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方 ...

  6. dubbo web工程示例_分布式开发-Zooker+dubbo入门-Demo

    作者:知了堂-刘阳 1.什么是SOA架构 SOA 是Service-Oriented Architecture的首字母简称,它是一个面向服务的架构模式(俗称:分布式:面服务的分布式) 为什么互联网项目 ...

  7. 最简单的dubbo教程-快速入门《一》

    最简单的dubbo教程-快速入门<一> 目录(?)[+] 所需环境 zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册. 可参考 ...

  8. 1.Maven+SpringMVC+Eclipse软件安装配置,Maven报插件错误,Eclipse总是卡死的解决办法,导入一个maven工程后 一直显示importing maven project

     使用Maven+SpringMVC+Eclipse软件安装配置过程中的问题: 1.Eclipse总是卡死的解决办法: 一:内存不足所以会卡死,配置一下eclipse.ini修改这几个值就好了-X ...

  9. ❤️六万字《SpringMVC框架介绍—从入门到高级》(建议收藏)❤️

    <SpringMVC框架介绍>(建议收藏) ❤️希望博友给个三连+关注!!! SSM: mybatis + Spring + SpringMVC MVC三层架构 SpringMVC + V ...

  10. 分布式事务框架lcn入门demo

    文章目录 简介 实现原理 入门demo 简介 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果. LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TX ...

最新文章

  1. ZOJ 3820 Building Fire Stations
  2. pandas高效读取大文件(csv)方法之-parquet
  3. mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
  4. Civil 3D 中使用COM API导入DEM数据创建曲面
  5. colorkey唇釉是否安全_colorkey空气唇釉,19/支
  6. java 推送数据给js,Node.js实现数据推送
  7. Windows平台下go编译器LiteIDE的安装和使用
  8. innodb的锁时间
  9. centos从安装到环境配置
  10. php找零页面,找零问题
  11. 【数据结构实验】队列的应用
  12. 储存卡数据怎么恢复?恢复靠它
  13. Qt高质量的开源项目合集
  14. aec Gain 公式
  15. PCB铜箔厚度单位盎司(OZ)的具体信息
  16. 低功耗HC32F002C4PZ
  17. 【操作系统】30天自制操作系统--(14)多任务1
  18. 随笔-Unity部分版本加载AB资源时崩溃问题
  19. 基于Canvas的九宫格抽奖,就是仿csdn的APP做的,能过审不?
  20. 一款BLE-MIDI的蓝牙MIDI模块

热门文章

  1. 力扣-1508 子数组和排序后的区间和
  2. JSP 的错误调试方法
  3. Android 自定义View(二)绘制一个封闭多边形
  4. Android AlertDialog 实现对话框 警告对话框、列表对话框、自定义对话框
  5. HDMI热插拔检测原理
  6. git命令的理解与扩展
  7. 关于编码问题,报错:'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte sequence...
  8. 回溯算法与八皇后问题
  9. EXTI外部中断触发:神舟IV
  10. 是时候了,我们需要前端架构师