SpringBoot統合Dubbo 2.5.10

33141 ワード

SpringBoot統合Dubbo 2.5.10、公式最新spring-boot-starterを使用
スタート
DubboはすでにApache孵化器に入り、公式のspring-boot-starter 0を発表した.1.0は、dubboアプリケーションの構成を簡略化するためのもので、主にautoconfigure(自動アセンブリ)、externalized-configuration(外部化構成)、actuator(生産準備)などが含む、公式github dubbo-spring-boot-starterを参照することができる.
準備作業
JDK 1を事前にインストールする必要がある.8,Maven,Zookeeper.
Mavenプロジェクトの初期化
プロジェクト全体の構造を明確にするために、モジュール化されたmavenプロジェクトを使用します.pomファイルは次のとおりです.

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>1.5.8.RELEASEversion>
        <relativePath/> 
    parent>

    <modelVersion>4.0.0modelVersion>
    <groupId>org.boot.dubbogroupId>
    <artifactId>boot-dubboartifactId>
    <version>1.0.0-SNAPSHOTversion>
    <packaging>pompackaging>

    <name>boot-dubboname>
    <description>Dubbo project for Spring Bootdescription>

    <modules>
        <module>dubbo-providermodule>
        <module>dubbo-consumermodule>
        <module>dubbo-apimodule>
    modules>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
        <dubbo-spring-boot-starter.version>0.1.0dubbo-spring-boot-starter.version>
        <springboot.version>1.5.8.RELEASEspringboot.version>
        <fastjson-version>1.2.31fastjson-version>
        <zk-client.version>0.2zk-client.version>
        <dockerfile-maven.version>1.4.3dockerfile-maven.version>
    properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.bootgroupId>
                <artifactId>dubbo-spring-boot-starterartifactId>
                <version>${dubbo-spring-boot-starter.version}version>
            dependency>

            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-loggingartifactId>
                <version>${springboot.version}version>
            dependency>

            <dependency>
                <groupId>com.101tecgroupId>
                <artifactId>zkclientartifactId>
                <version>${zk-client.version}version>
            dependency>
        dependencies>
    dependencyManagement>

project>


主に3つのモジュールに分けられ、api、provider、consumer
生産者の作成
spring-boot-starterがあればdubboの構成は非常に簡単になり、以前のようにxmlファイルをたくさん配置する必要はありません.いくつかの簡単な構成だけで、箱を開けてすぐに使用することができます.
  • 生産者のpomを先に配置する.xml
  • 
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <groupId>org.boot.dubbogroupId>
        <artifactId>dubbo-providerartifactId>
        <version>${parent.version}version>
        <packaging>jarpackaging>
    
        <parent>
            <artifactId>boot-dubboartifactId>
            <groupId>org.boot.dubbogroupId>
            <version>1.0.0-SNAPSHOTversion>
            <relativePath>../pom.xmlrelativePath>
        parent>
    
        <name>dubbo-providername>
        <description>Dubbo project for Spring Boot:Providerdescription>
    
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-actuatorartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-loggingartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
            dependency>
    
            <dependency>
                <groupId>com.alibaba.bootgroupId>
                <artifactId>dubbo-spring-boot-starterartifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>zookeeperartifactId>
                        <groupId>org.apache.zookeepergroupId>
                    exclusion>
                exclusions>
            dependency>
    
            <dependency>
                <groupId>com.101tecgroupId>
                <artifactId>zkclientartifactId>
            dependency>
    
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
            dependency>
    
            <dependency>
                <groupId>org.boot.dubbogroupId>
                <artifactId>dubbo-apiartifactId>
                <version>${parent.version}version>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    project>
    
  • 次にpropertiesを使用してSpringBootとDubboの構成を行い、以下のように構成する:
  •    spring.application.name=springboot-dubbo-provider
       server.port=9090
       #dubbo  
       dubbo.application.id=springboot-dubbo-provider
       dubbo.application.name=springboot-dubbo-provider
       dubbo.application.owner=luoliang
       #    
       dubbo.protocol.id=dubbo
       dubbo.protocol.name=dubbo
       #    20880    12345
       dubbo.protocol.port=12345
       #      
       dubbo.registry.id=my-registry
       dubbo.registry.address=zookeeper://localhost:2181
       #  dubbo    ,  dubbo @Service, @Reference  
       dubbo.scan.base-packages=org.boot.dubbo.provider.service
       #dubbo    
       endpoints.dubbo.enabled=true
       management.health.dubbo.status.defaults=memory
       management.health.dubbo.status.extras=load,threadpool
       management.port=9091
     ```
     3.          ,Dubbo      ,                ,               
    *   api    interface
     ```java
    public interface HelloService {
        String sayHello(String name);
    }
  • はインタフェースを実現し、自分の業務ロジック
  • を加える.
    @Service(version = "1.0.0",
            application = "${dubbo.application.id}",
            protocol = "${dubbo.protocol.id}",
            registry = "${dubbo.registry.id}")
    public class HelloServiceImpl implements HelloService {
    
        @Override
        public String sayHello(String name) {
            return "Hello, " + name + " (from Spring Boot)";
        }
    }

    注意、ここのサービス注釈はcomです.alibaba.dubbo.config.annotation.Service
    消費者の作成
  • 消費者のpomを配置する.xml
  • 
    <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
        <groupId>org.boot.dubbogroupId>
        <artifactId>dubbo-consumerartifactId>
        <version>${parent.version}version>
        <packaging>jarpackaging>
    
        <parent>
            <artifactId>boot-dubboartifactId>
            <groupId>org.boot.dubbogroupId>
            <version>1.0.0-SNAPSHOTversion>
            <relativePath>../pom.xmlrelativePath>
        parent>
    
        <name>dubbo-consumername>
        <description>Dubbo project for Spring Boot:Consumerdescription>
    
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-actuatorartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
            dependency>
    
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-loggingartifactId>
            dependency>
    
            <dependency>
                <groupId>com.alibaba.bootgroupId>
                <artifactId>dubbo-spring-boot-starterartifactId>
            dependency>
    
            <dependency>
                <groupId>com.101tecgroupId>
                <artifactId>zkclientartifactId>
            dependency>
    
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
            dependency>
    
            <dependency>
                <groupId>org.boot.dubbogroupId>
                <artifactId>dubbo-apiartifactId>
                <version>${parent.version}version>
            dependency>
        dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    project>
    
  • application.properties構成は、
  • spring.application.name=springboot-dubbo-consumer
    server.port=8081
    #dubbo  
    dubbo.application.id=springboot-dubbo-consumer
    dubbo.application.name=springboot-dubbo-consumer
    dubbo.application.owner=luoliang
    #      
    dubbo.registry.id=my-registry
    dubbo.registry.address=zookeeper://localhost:2181
    management.port=8082
  • はサービスを記述してdubboのサービスを消費し、主なコードは以下の通りである:
  • @Service
    public class ConsumerServiceImpl implements ConsumerService {
        @Reference(version = "1.0.0",
                application = "${dubbo.application.id}")
        private HelloService helloService;
    
        @Override
        public String sayHello(String name) {
            return helloService.sayHello(name);
        }
    }
     mvc controller      
    
    @RestController
    @RequestMapping("/user")
    public class DefaultController {
        @Resource
        private ConsumerService consumerService;
    
        @RequestMapping("/sayHello")
        public String register(String name) {
            return consumerService.sayHello(name);
        }
    }
    

    ここまで、プロジェクトの基本構造全体が構築され、consumerはproviderが提供するサービスを消費することができます.
    ここでテストして、providerとconsumerをそれぞれ起動して、ブラウザを開いて、入力しますhttp://localhost:8081/user/sayHello?name=dubbo
    プロジェクトが正常に統合されたことを示す結果が予想通りに返されたことがわかります.
    ソースコードが必要なら本人githubに移動してください.boot-dubbo、次のブログはこのブログに続き、Dockerコンテナ化SpringBoot+Dubboアプリケーションの使用を学びます.
    リファレンス
  • https://github.com/apache/incubator-dubbo-spring-boot-project