Running Dubbo On Spring Boot
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容器(比如Tomcat、Jetty等),并且我们的配置是没有添加容器的,所以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.xml的build节点下面,配置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的更多相关文章
- zookeeper + dubbo + spring boot
最近开始接触了分布式的一些东西,这里给自己作一个学习笔记. 这里只是做一个运行demo,具体的理论知识就不在这里阐述了. 1.zookeeper的安装与启动 下载地址:http://www.apach ...
- Dubbo在Spring和Spring Boot中的使用
一.在Spring中使用Dubbo 1.Maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifa ...
- 玩转Spring Boot 集成Dubbo
玩转Spring Boot 集成Dubbo 使用Spring Boot 与Dubbo集成,这里我之前尝试了使用注解的方式,简单的使用注解注册服务其实是没有问题的,但是当你涉及到使用注解的时候在服务里面 ...
- 高效开发 Dubbo?用 Spring Boot 可得劲!
不仅简化了 Dubbo 基于 xml 配置的方式,也提高了日常开发效率,甚至提升了工作幸福感. 为了节省亲爱的读者您的时间,请根据以下2点提示来阅读本文,以提高您的阅读收获效率哦. 如果您只有简单的 ...
- Spring Boot中使用Dubbo
高并发下Redis会出现的问题: 缓存穿透 缓存雪崩 热点缓存 一.定义commons工程11-dubboCommons (1) 创建工程 创建Maven的Java工程,并命名为11-dubboCom ...
- Spring Boot高级
Spring Boot高级内容概要一.Spring Boot与缓存二.Spring Boot与消息三.Spring Boot与检索四.Spring Boot与任务五.Spring Boot与安全六.S ...
- Spring Boot源码(二):SPI去除web.xml
SPI广泛用于dubbo,spring boot,spring cloud alibaba等 关于SPI,可见SPI-Service Provider Interface 继续上篇文章 上面三句代码的 ...
- Spring Boot整合Dubbo框架demo
Dubbo框架原理见之前的博文:http://www.cnblogs.com/umgsai/p/5836925.html 首先启动zookeeper Server端 Pom配置如下 <?xml ...
- Spring Boot 中如何使用 Dubbo Activate 扩展点
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司的核心竞争力在于创新 – <启示录> 』 继续上一篇:< Spri ...
随机推荐
- await and async
Most people have already heard about the new “async” and “await” functionality coming in Visual Stud ...
- Springboot搭建web项目
最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...
- 分享两个BPM配置小技巧
1.小技巧 流程图修改后发布的话版本号会+1,修改次数多了之后可能会导致版本号很高,这个时候可以将流程导出,然后删除对应的流程包再导入,发布数据模型和流程图之后,版本清零 2.小技巧 有的同事入职后使 ...
- 全网独家MongoDB Certified DBA Associate考试认证视频
该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...
- SQLServer如何添加try catch
在.net中我们经常用到try catch.不过在sqlserver中我们也可以使用try catch捕捉错误,在这里把语法记录下来和大家分享一下, --构建存储过程CREATE PROCEDURE ...
- AutoMapper使用中的问题
指定值只会执行一次 public class MomanBaseProfile : Profile { public MomanBaseProfile() { CreateMap<Request ...
- 归并排序的java实现
归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...
- Vue.js——60分钟组件快速入门(上篇)
组件简介 组件系统是Vue.js其中一个重要的概念,它提供了一种抽象,让我们可以使用独立可复用的小组件来构建大型应用,任意类型的应用界面都可以抽象为一个组件树: 那么什么是组件呢?组件可以扩展HTML ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- 闲话Promise机制
Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js ...