设为首页 收藏本站
查看: 988|回复: 0

[经验分享] Running Dubbo On Spring Boot

[复制链接]

尚未签到

发表于 2017-3-1 08:21:22 | 显示全部楼层 |阅读模式
  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({&quot;classpath:spring-context.xml&quot;})  

  @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({&quot;classpath:spring/spring-context.xml&quot;})

  
public>  

  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(&quot;项目启动!&quot;);
  

  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目录下面,会产生两个文件
DSC0000.png

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


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

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

  Bingo ! Dubbo running over the Spring Boot!
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348543-1-1.html 上篇帖子: Apache Camel系列(1)----使用场景 下篇帖子: windows环境tomcat8配置Solr5.5.1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表