基于SpringBoot2.0.x+Dubbo2.6.x+zookeeper3.4.1x创建RPC服务

由于公司使用的是springboot+dubbo的分布式架构,虽然个人更偏向于springcloud,但是日常中使用dubbo更多,所以也参考了很多的资料,自己搭建了一个基于目前最新版本的RPC服务demo。(springboot 2.0.5+dubbo2.6.3+zookeeper3.4.10)用来熟悉dubbo和学习相关技术,把搭建过程记录下来,防止自己和他人踩坑。

下图是dubbo官网给的图。在系统越来越庞大的情况下,分布式就显得尤为重要了,应用之间交互是不可避免的,将核心业务抽取出来,作为独立的服务,然后逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

基于SpringBoot2.0.x+Dubbo2.6.x+zookeeper3.4.1x创建RPC服务_第1张图片

在项目搭建之前首先需要一个注册中心,dubbo推荐使用zookeeper,所以我这里使用的也是zookeeper,下载地址:http://zookeeper.apache.org/。下载完成后解压就行。不会的参考:http://dubbo.apache.org/zh-cn/docs/admin/install/zookeeper.html

首先使用idea创建一个空的springboot项目用来做多模块的父工程:spring-boot-dubbo-parent。这里要注意把打包方式改为pom类型。代码如下:



    4.0.0

    com.wangzc
    spring-boot-dubbo-parent
    0.0.1-SNAPSHOT
    pom

    spring-boot-dubbo-parent
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


然后在父工程下创建一个module:spring-boot-dubbo-api。用来存放所有的公共接口。pom文件同上,打包类型为jar。

再创建一个服务生产者:spring-boot-dubbo-provider。这里需要添加dubbo以及zookeeper的包,同时使用dubbo官方给出的starter。github地址:https://github.com/apache/incubator-dubbo-spring-boot-project(不是alibaba的那个,那个不维护了。)同时引入刚才创建的api。



    4.0.0

    com.wangzc
    spring-boot-dubbo-provider
    0.0.1-SNAPSHOT
    jar

    spring-boot-dubbo-provider
    Demo project for Spring Boot

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            com.wangzc
            spring-boot-dubbo-api
            0.0.1-SNAPSHOT
        

        
            com.alibaba
            dubbo
            2.6.3
        

        
            org.apache.zookeeper
            zookeeper
            3.4.10
            
                
                    org.slf4j
                    slf4j-log4j12
                
                
                    log4j
                    log4j
                
            
        

        
            com.alibaba.boot
            dubbo-spring-boot-starter
            0.2.0
        

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


最后一个就是服务消费者了:spring-boot-dubbo-consumer。pom文件同上,多了一个web包。


      org.springframework.boot
      spring-boot-starter-web

parent的pom文件引入3个module


    spring-boot-dubbo-api
    spring-boot-dubbo-provider
    spring-boot-dubbo-consumer

这里就用dubbo官网给出的最简单的sayHello例子用来验证服务是否发布成功,在api的module包下创建一个接口用来提供服务。

package com.FarStars.springbootdubboapi.service;

/**
 * @author FarStars
 * @date 2018/9/13
 */
public interface HelloService {

    /**
     * sayHello
     *
     * @author FarStars
     * @param name name
     * @return java.lang.String
     */
    String sayHello(String name);

}

provider的application.properties配置文件:

# Spring boot application
spring.application.name = spring-boot-dubbo-provider
server.port = 9090
management.port = 9091

# Service version
provider.service.version = 1.0.0

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
# 实现类的包路径(换成自己的)
dubbo.scan.basePackages  = com.xxx.springbootdubboprovider.impl

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider
dubbo.application.name = dubbo-provider

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

## RegistryConfig Bean
dubbo.registry.id = my-registry
# zookeeper的地址(换成自己的)
dubbo.registry.address = zookeeper://xxx:2181

HelloService的实现类,注意这里要用dubbo的service注解,不是spring的。

package com.FarStars.springbootdubboprovider.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.FarStars.springbootdubboapi.service.HelloService;

/**
 * @author FarStars
 * @date 2018/9/13
 */
@Service(
        version = "${provider.service.version}",
        application = "${dubbo.application.id}",
        protocol = "${dubbo.protocol.id}",
        registry = "${dubbo.registry.id}"
)
public class HelloServiceImpl implements HelloService {

    /**
     * sayHello
     *
     * @param name name
     * @return java.lang.String
     * @author FarStars
     */
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

consumer的application.properties配置文件:

# Spring boot application
spring.application.name = spring-boot-dubbo-consumer
server.port = 8080
management.port = 8081

# Service Version
consumer.service.version = 1.0.0

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer
dubbo.application.name = dubbo-consumer

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20880

HelloController类:

package com.FarStars.springbootdubboconsumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.FarStars.springbootdubboapi.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author FarStars
 * @date 2018/9/13
 */
@RestController
public class HelloController {

    @Reference(
            version = "${consumer.service.version}",
            application = "${dubbo.application.id}",
            url = "dubbo://localhost:20880"
    )
    private HelloService helloService;

    @RequestMapping("/sayHello")
    public String sayHello(@RequestParam String name) {
        return helloService.sayHello(name);
    }
}

启动类上要加controller包扫描

@SpringBootApplication(scanBasePackages =     
    "com.FarStars.springbootdubboconsumer.controller")

这样就算搭建完成了,测试时先启动provider,再启动consumer。

示例 Controller : http://localhost:8080/sayHello?name=FarStars  网页输出如下,表示服务发布成功基于SpringBoot2.0.x+Dubbo2.6.x+zookeeper3.4.1x创建RPC服务_第2张图片

本文参考:dubbo官网:http://dubbo.apache.org/zh-cn/index.html

starter中文文档:https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md

也可以引入actuator包检查健康状态,请参考以上文档。

(本人才疏学浅,如有错误纯属正常,欢迎指出!)

你可能感兴趣的:(springboot,dubbo)