`
sunbin
  • 浏览: 352433 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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容器(比如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拷贝到任意一个项目下启动:


启动provider服务

服务调用

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


consumer测试结果

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


consumer的调用情况

Bingo ! Dubbo running over the Spring Boot

分享到:
评论

相关推荐

    springboot2.0.x+dubbo-spring-boot-starter

    标题 "springboot2.0.x+dubbo-spring-boot-starter" 涉及的是将流行的微服务框架 Dubbo 集成到 Spring Boot 2.0.x 的项目实践中。这个集成使得开发者能够利用 Spring Boot 的便利性和 Dubbo 的高性能远程服务调用...

    【42】使用dubbo、spring-boot等技术实现互联网后台服务项目架构视频教程 .txt

    ### 使用Dubbo、Spring Boot等技术实现互联网后台服务项目架构 #### 一、引言 在当前快速发展的互联网行业中,微服务架构已经成为构建复杂系统的一种主流方式。微服务架构能够帮助开发团队更好地组织代码,提高...

    spring-dubbo-spring-boot.rar_java编程_spring_spring boot_threwwab_

    《Spring Dubbo与Spring Boot整合应用详解》 在现代企业级开发中,Spring框架和其衍生的Spring Boot已经成为Java开发者的重要工具。同时,随着微服务架构的流行,Dubbo作为一款高效率的服务治理框架,也得到了广泛...

    微服务架构面试题系列:Dubbo+Spring Boot+Spring Cloud.zip

    本压缩包文件"微服务架构面试题系列:Dubbo+Spring Boot+Spring Cloud.zip"包含了关于微服务领域的一系列面试题目,主要涉及了Dubbo、Spring Boot、Spring Cloud等关键技术和工具。接下来,我们将深入探讨这些技术...

    微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.rar

    这个压缩包文件"微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.rar"涵盖了三个关键的技术框架,它们是Dubbo、Spring Boot以及Spring Cloud。这些技术在Java面试中常常被提及,对于求职者来说,理解和掌握...

    基于Dubbo与Spring Boot的服务化实践demo.zip

    本项目是一个简单的Dubbo整合Spring Boot的示例,展示了如何通过Dubbo实现服务的注册与发现、服务的调用和监控等功能。通过本demo,读者可以了解到Dubbo服务框架与Spring Boot框架的集成方式,以及如何快速构建微...

    面试专题-面试人员必看-微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.rar

    这个面试专题系列涵盖了三个关键的技术框架:Dubbo、Spring Boot和Spring Cloud,这些都是构建微服务架构的核心组件。以下是对这些技术的详细解读: 1. **Dubbo**:由阿里巴巴开源的高性能Java RPC框架,它为服务...

    dubbo-spring-boot-project:Apache Dubbo的Spring Boot项目

    Apache Dubbo Spring Boot项目 Spring Boot Project使使用Dubbo作为RPC框架轻松创建应用程序。 此外,它还提供: (例如,注释驱动,自动配置,外部化配置)。 (例如,安全性,运行状况检查,外部化配置)。 ...

    dubbo-spring-boot-starter-2.7.8.zip

    《Dubbo-Spring-Boot-Starter 2.7.8:构建高效微服务架构的关键组件》 在现代Java开发领域,微服务架构已经成为构建大型、复杂应用的主流方式。其中,Dubbo作为阿里巴巴开源的高性能服务框架,为开发者提供了强大的...

    dubbo-spring-boot-autoconfigure-2.7.8.zip

    《Dubbo Spring Boot Autoconfigure 2.7.8:深入解析与应用》 在Java开发领域,Dubbo作为一款高性能、轻量级的开源服务框架,早已被广大开发者所熟知。而Spring Boot作为Spring框架的简化版,通过自动配置极大地...

    dubbo的springboot自动配置spring-boot-starter-dubbo.zip

    spring-boot-starter-dubbo是 dubbo 的 spring boot starter,它可以无缝地对接 spring boot和dubbo ,方便大家使用 dubbo 组件。 spring-boot-starter-dubbo 支持的 jdk 版本为 1.6 或者 1.6 。 spring-boot-...

    dubbo——spring boot中整合其他方式1

    在IT行业中,Spring Boot与Dubbo的整合是一个常见的任务,特别是在构建微服务架构时。Spring Boot以其简洁的配置和快速的开发能力深受开发者喜爱,而Dubbo作为一款高性能的Java RPC框架,能够帮助我们实现服务间的...

    微服务架构面试专题系列:Dubbo+Spring Boot+Spring Cloud.zip

    本面试专题系列主要涵盖了三个关键的技术组件:Dubbo、Spring Boot和Spring Cloud,它们在构建微服务架构中扮演着重要的角色。 首先,让我们深入了解一下Dubbo。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java远程...

    一个供学习的商城,以便整合Dubbo,Spring Boot

    【标题】:“一个供学习的商城,以便整合Dubbo,Spring Boot” 【正文】: 本项目是一个基于Java技术栈的在线商城系统,旨在提供一个学习平台,帮助开发者掌握如何将Spring Boot与Dubbo服务治理框架整合应用。这个...

    spring_dubbo spring_dubbo spring_dubbo

    spring_dubbo spring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_dubbospring_...

    Dubbo Spring Boot 工程

    【标题】"Dubbo Spring Boot 工程"指的是将分布式服务框架Dubbo与Spring Boot集成的应用工程示例。这个项目提供了使用Spring Boot构建基于Dubbo服务的起点,旨在帮助开发者快速理解和实践如何在Spring Boot环境下...

    springboot+dubbo

    - **应用创建**:通过 `@SpringBootApplication` 注解启动 Spring Boot 应用,包含 `@SpringBootConfiguration`、`@EnableAutoConfiguration` 和 `@ComponentScan` 三个注解的功能。 2. **Dubbo**: - **服务治理...

    zookeeper+dubbo+spring

    在IT行业中,Zookeeper、Dubbo和Spring是三个非常重要的组件,它们在分布式系统和微服务架构中扮演着核心角色。下面将详细解释这三个技术及其相互间的整合。 **Zookeeper** 是一个分布式的,开放源码的分布式应用...

    一个供学习的商城,以便整合Dubbo,Spring Boot,MyBatis,Redis,MySQL,Kafka等分.zip

    这个压缩包文件“一个供学习的商城,以便整合Dubbo,Spring Boot,MyBatis,Redis,MySQL,Kafka等分.zip”显然包含了构建一个完整电商系统所需要的关键技术组件。让我们详细探讨一下这些技术及其在实际应用中的作用...

Global site tag (gtag.js) - Google Analytics