Dubbo(http://dubbo.io/) 是阿里的开源的一款分布式服务框架。而Spring Boot则是Spring社区这两年致力于打造的简化Java配置的微服务框架。

利用他们各自优势,配置到一起,可以帮助我们构建出非常优秀的微服务。

配置Maven

使用的Dubbo的一般都是大型项目,maven项目构建也会使用parent节点,Spring Boot考虑到了这种情况,提供了dependencyManagement的方式,引入Spring Boot的包。

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.3.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

在具体的starter选择上,使用spring-boot-starter,这样spring-boot会只启动spring的配置,而不会自动启用什么软件或者是网络服务器。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

Maven的部分就配置完了

配置启动类

Dubbo提供了一个启动类com.alibaba.dubbo.container.Main,在Dubbo的项目中,大多数都是使用这个类启动项目的,而这个类中会加载很多的容器,其中最重要的就是SpringContainer,这个类会读取系统中相关的spring配置。

而在Spring Boot的体系中,则是任意写一个启动类,然后加注解@SpringBootApplication在这个类之上,让spring boot能够发现这个类,并启动这个类的main方法。

Spring Boot的设计中,推荐大家使用无XML配置的方式启动项目,但大多数项目由于各种原因很难摆脱XML的束缚,这种情况下,使用@ImportResource注解引入xml配置,在@ImportResource中填写需要引入的配置:

@ImportResource({"classpath:spring-context.xml"})

@ImportResource会自动去查找resource目录下的文件并引入Spring Boot

经接着,我们需要解决启动类中main()方法的问题,一般情况下,我们写的启动类会使用:

SpringApplication.run(DemoApplication.class, args);

但由于Dubbo项目引用了Spring Web框架中的一些类,使得Maven也不得不导入Spring Web项目,了而Spring Boot发现跟web相关的框架就会去启动web容器(比如TomcatJetty等),并且我们的配置是没有添加容器的,所以main()方法需要写成:

ApplicationContext ctx = new SpringApplicationBuilder()
.sources(DemoApplication.class)
.web(false) // 没错,把项目设置成非web环境
.run(args);

还需要注意的是,由于使用了非常纯粹的starter,而且Dubbo的网络框架也是非阻塞的,所以我们还需使用一些方法,保持主线程的阻塞状态。比如我使用CountDownLatch来做这件事。最终形成了以下启动类的完整代码:

@SpringBootApplication
@ImportResource({"classpath:spring/spring-context.xml"})
public class DemoApplication { private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class); @Bean
public CountDownLatch closeLatch() {
return new CountDownLatch(1);
} public static void main(String[] args) throws InterruptedException { ApplicationContext ctx = new SpringApplicationBuilder()
.sources(DemoApplication.class)
.web(false)
.run(args); logger.info("项目启动!"); CountDownLatch closeLatch = ctx.getBean(CountDownLatch.class);
closeLatch.await();
}
}

好了这个类构建完成之后,我们按照Dubbo的方式配置好service,就可以打包了。

打包部署

Dubbo本身有一个比较麻烦的问题就是在打包部署,从官方的demo上来看,Dubbo打包借助了maven插件assembly,而且要写不少的配置,而Spring Boot的工具相对来说,几乎不需要任何的配置。在pom.xmlbuild节点下面,配置spring-boot-maven-plugin插件

<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.3.5.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>

命令行切换到项目的目录之后,执行命令:

mvn package

在target目录下面,会产生两个文件

demo-0.0.1-SNAPSHOT.jar拷贝到任意一个项目下启动:

服务调用

我简单地写了一个consumer的测试类,从consumer项目调用项目,也是可以顺利调用到这个服务的。

这个时候在provider端,也是可以consumer看到调用的情况 :

Bingo ! Dubbo running over the Spring Boot!

Running Dubbo On Spring Boot的更多相关文章

  1. zookeeper + dubbo + spring boot

    最近开始接触了分布式的一些东西,这里给自己作一个学习笔记. 这里只是做一个运行demo,具体的理论知识就不在这里阐述了. 1.zookeeper的安装与启动 下载地址:http://www.apach ...

  2. Dubbo在Spring和Spring Boot中的使用

    一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifa ...

  3. 玩转Spring Boot 集成Dubbo

    玩转Spring Boot 集成Dubbo 使用Spring Boot 与Dubbo集成,这里我之前尝试了使用注解的方式,简单的使用注解注册服务其实是没有问题的,但是当你涉及到使用注解的时候在服务里面 ...

  4. 高效开发 Dubbo?用 Spring Boot 可得劲!

    不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感. 为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦. 如果您只有简单的 ...

  5. Spring Boot中使用Dubbo

    高并发下Redis会出现的问题: 缓存穿透 缓存雪崩 热点缓存 一.定义commons工程11-dubboCommons (1) 创建工程 创建Maven的Java工程,并命名为11-dubboCom ...

  6. Spring Boot高级

    Spring Boot高级内容概要一.Spring Boot与缓存二.Spring Boot与消息三.Spring Boot与检索四.Spring Boot与任务五.Spring Boot与安全六.S ...

  7. Spring Boot源码(二):SPI去除web.xml

    SPI广泛用于dubbo,spring boot,spring cloud alibaba等 关于SPI,可见SPI-Service Provider Interface 继续上篇文章 上面三句代码的 ...

  8. Spring Boot整合Dubbo框架demo

    Dubbo框架原理见之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先启动zookeeper Server端 Pom配置如下 <?xml ...

  9. Spring Boot 中如何使用 Dubbo Activate 扩展点

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司的核心竞争力在于创新 – <启示录> 』 继续上一篇:< Spri ...

随机推荐

  1. nohup程序后台执行

    Linux常用命令,用于不挂断的执行程序. nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应 ...

  2. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  3. Carousel 旋转画廊特效的疑难杂症

    疑难杂症 该画廊特效的特点就是前后元素有层级关系. 我想很多人应该看过或者用过这个插件carousel.js,网上也有相关的教程.不知道这个插件的原型是哪个,有知道的朋友可以告诉我. 该插件相对完美, ...

  4. CRL快速开发框架系列教程十二(MongoDB支持)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 通过AngularJS实现前端与后台的数据对接(一)——预备工作篇

    最近,笔者在做一个项目:使用AngularJS,从而实现前端与后台的数据对接.笔者这是第一次做前端与后台的数据对接的工作,因此遇到了许多问题.笔者在这些问题中,总结了一些如何实现前端与后台的数据对接的 ...

  6. ASP.NET MVC原理

    仅此一文让你明白ASP.NET MVC原理   ASP.NET MVC由以下两个核心组成部分构成: 一个名为UrlRoutingModule的自定义HttpModule,用来解析Controller与 ...

  7. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  8. BPM端到端流程解决方案分享

    一.需求分析 1.企业规模的不断发展.管理水平的不断提升,通常伴随着企业各业务板块管理分工更细.更专业,IT系统同样越来越多.越来越专 业化.不可避免的,部门墙和信息孤岛出现了,企业的流程被部门或者I ...

  9. Dynamics CRM 2015-Data Encryption激活报错

    在CRM的日常开发中,Data Encryption经常是不得不开启的一个功能.但是有时,我们可能遇到一种情况,Organization导入之后,查看Data Encryption是已激活的状态,但是 ...

  10. Centos6.5 配置Nginx开机自启动

    1.在/etc/init.d/目录下创建 nginx 文件,内容如下: #!/bin/sh # # nginx - this script starts and stops the nginx dae ...