SpringBoot2.0完美整合Dubbo

2019已经到了,但愿我跟你们同样有一个新的开始,18年有再多的烦恼和不堪,那只是过去,接下来走好脚下的路就好了。java



如今微服务愈来愈广泛,基本如今的新项目基本都是采用微服务的方式,这里咱们暂不讨论微服务的好处什么的,咱们常见的微服务架构就是SpirngCloud,它整合了各类组件,让咱们的开发确实变得很是的方便,除了SpringCloud以外,其实还有另外的一种架构风格,SpringBoot + Dubbo,那么咱们今天就来讲一下,SpringBoot如何集成Dubbo作微服务架构。git


项目结构

咱们想要开发一个完善的微服务架构,那么作好各模块之间的依赖关系是至为重要的,那么咱们先来看下咱们的项目结构。github

咱们构建这个项目其实主要是模拟这样一个流程,在订单模块去调用会员模块的接口。这里我就不说如何去安装zookeeper和Dubbo了,这个东西一百度一大把,若是实在有问题的话,底部留言吧,我看到会回复的。(建议你们尽可能在Linux环境下去安装)web


构建项目

接下来咱们首先构建咱们的父项目(springboot2.0-dubbo-parent),看须要引入哪些maven坐标。如下就是咱们SpringBoot2.0整合Dubbo所须要的一些maven坐标,这里我并无将整个pom文件放上来,主要太长,看着不方便,我已经把这个上传到了github上,下文有地址,能够点进去看。spring


<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.1.RELEASE</version>
 </parent>

 <!-- 编写统一的版本控制 -->
 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
   <java-version>1.8</java-version>
   <curator-framework>4.0.1</curator-framework>
   <zookeeper.version>3.4.13</zookeeper.version>
   <dubbo.starter.version>0.2.0</dubbo.starter.version>
 </properties>

 <dependencies>

   <!-- SpringBoot 整合 Web组件 -->
   <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
   </dependency>

   <dependency>
     <groupId>com.alibaba.boot</groupId>
     <artifactId>dubbo-spring-boot-starter</artifactId>
     <version>${dubbo.starter.version}</version>
   </dependency>

   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.11</version>
     <scope>test</scope>
   </dependency>
 </dependencies>复制代码


接下来就是构建咱们接口管理模块(springboot2.0-dubbo-public-api-service),全部模块的接口定义必须放在该模块下,这个模块中没有什么特别的maven坐标须要引入。api


再下来构建会员接口模块(springboot2.0-dubbo-public-api-member-service),该模块是接口管理模块的子模块,这个模块中也没有什么须要特别须要引入的maven坐标。springboot


而后咱们就是来建立会员模块的实现模块(springboot2.0-dubbo-public-api-member-service-impl)了,这个模块是父项目下的一个模块,并非存在于接口管理模块下的,不清楚能够看看上面的项目结构图。这个模块中须要引入一个maven坐标,由于他要去实现会员模块定义的接口,那么就必须把会员模块引入进来。bash


<dependency>
   <groupId>com.xiaotao</groupId>
   <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>复制代码


最后咱们再来构建订单模块的表现层(springboot2.0-dubbo-order-web),这个模块中也是引入一个maven就好,由于它要去调用会员模块的接口,因此咱们将会员模块的maven引入进来。架构

<dependency>
   <groupId>com.xiaotao</groupId>
   <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>复制代码


项目完善

到这里咱们整个模块算是建立完了,咱们剩下的就是去完善咱们的项目。订单模块要调用会员模块的接口,那么咱们首先应该在会员的接口模块建立一个接口。app

public interface IMemberService {

   // 会员接口
   String getUser();
}复制代码


会员接口的实现模块实现该接口

@Service
public class MemberServiceImpl implements IMemberService {


   @Override
   public String getUser() {

       System.out.println("订单服务调用会员服务");
       return "订单服务调用会员服务";
   }
}复制代码


注意:咱们以前采用@Service是将咱们的服务注册到容器中,可是咱们如今使用的是Dubbo那么咱们是将咱们的服务注册到Dubbo中,因此你们这里导包的时候必定要注意。


这个模块是要启动起来的,因此咱们还要写咱们的启动类

@EnableDubbo
@SpringBootApplication
public class AppMember {

   public static void main(String[] args) {
       SpringApplication.run(AppMember.class, args);
   }
}复制代码


注意:@EnableDubbo这个注解是开启Dubbo服务的,若是不加该注解,那么该服务是注册不到Dubbo中去的。


最后咱们须要配置咱们的dubbo,咱们的dubbo将服务注册到哪里这些咱们尚未进行配置,咱们在springboot的resources下的application.yml中进行配置,具体配置以下

server:
 port: 9002

dubbo:
 application:
 ###########注册到注册中心的名称############
   name: member
 ###########采用协议和端口号################
 protocol:
 ###########采用dubbo协议####################
   name: dubbo
 ###########发布dubbo端口号为20880###########
   port: 20881
 registry:
 ###########注册中心地址#####################
   address: zookeeper://192.168.50.128:2181

spring:
 output:
   ansi:
     enabled: always复制代码


到这里咱们订单这个模块就算搞定了,将会员实现这个模块启动起来,而后访问Dubbo地址(http://192.168.50.128:8080/dubbo-admin-2.6.0/),这里是个人地址,你要访问你的地址。


咱们经过控制台能够看到Dubbo服务已经注册进去了。

咱们再来看看Dubbo控制面板,能够看到这个服务的确已经注册进来了。


最后咱们来讲下,咱们若是在订单模块去进行调用。首先咱们在订单模块写一个接口去调用咱们会员模块的接口。

@RestController
public class OrderController {

   @Reference
   private IMemberService memberService;

   @GetMapping("/orderToMember")
   public String orderToMember() {

       String user = memberService.getUser();

       System.out.println(user);

       return user;
   }
}复制代码


注意:@Reference 这个注解其实跟咱们以前使用的@Autowired实际上是同样的意思,可是咱们以前将服务注册到了Dubbo中,因此咱们须要从Dubbo中去取这个服务,因此就必须使用这个注解。


启动类

@SpringBootApplication
@EnableDubbo
public class AppOrder {

   public static void main(String[] args) {
       SpringApplication.run(AppOrder.class, args);
   }
}复制代码


最后一步在配置下application.yml

server:
 port: 8001

dubbo:
 application:
 ##### 注册服务的名称
   name: order
 ##### 注册中心地址
 registry:
   address: zookeeper://192.168.50.128:2181
 ##### 调用服务超时时间
 consumer:
   timeout: 5000

spring:
 output:
   ansi:
     enabled: always复制代码


到这里咱们整个项目就写完了,那么最后咱们启动订单模块,看看是否调用成功。

最后经过测试咱们能够发现,是没有问题的。咱们再看看Dubbo的控制面板是否有消费者。

最后发现确实是有一个消费者的。


到这里咱们SpringBoot2.0整合Dubbo就已经完成了。


项目地址:https://github.com/liangbintao/springboot2.0-dubbo

相关文章
相关标签/搜索