springboot集成dubbo-spring-boot-starter 实现dubbo RPC远程调用分析

符号 阅读:247 2021-03-31 21:12:11 评论:0

dubbo-spring-boot-starter   Git源码地址: https://github.com/alibaba/dubbo-spring-boot-starter.git

创建一个SpringBoot Maven 项目(blog),且包含多个子项目(blog-api,blog-service,blog-web),在pom 文件中进行相关依赖:

blog父项目pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.zzg</groupId>
    <artifactId>blog</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>
    <modules>
        <module>blog-api</module>
        <module>blog-service</module>
        <module>blog-web</module>
    </modules>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <dubbo-spring-boot-starter.version>0.1.0</dubbo-spring-boot-starter.version>
        <springboot.version>1.5.8.RELEASE</springboot.version>
        <fastjson-version>1.2.31</fastjson-version>
        <zk-client.version>0.2</zk-client.version>
        <dockerfile-maven.version>1.4.3</dockerfile-maven.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo-spring-boot-starter.version}</version>
            </dependency>

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

            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zk-client.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

创建一个子项目blog-api:注意用于提供接口。(pom.xml 和 相关代码如下)

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.zzg</groupId>
    <artifactId>blog</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>blog-api</artifactId>
</project>

接口定义如下:

package com.springboot.blog.api;

public interface RpcService {
    public String rpc(String parame);
}
 

创建一个子项目blog-service:服务提供者。(注意涉及:dubbo和springboot的集成配置)

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.zzg</groupId>
        <artifactId>blog</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>blog-service</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.zzg</groupId>
            <artifactId>blog-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

application.properties (dubbo配置文件)

   spring.application.name=blog-service
   server.port=9090
   #dubbo\u914D\u7F6E
   dubbo.application.id=blog-service
   dubbo.application.name=blog-service
   #\u534F\u8BAE\u914D\u7F6E
   dubbo.protocol.id=dubbo
   dubbo.protocol.name=dubbo
   #\u628A\u9ED8\u8BA4\u768420880\u7AEF\u53E3\u6362\u621012345
   dubbo.protocol.port=12345
   #\u670D\u52A1\u6CE8\u518C\u914D\u7F6E
   dubbo.registry.id=my-registry
   dubbo.registry.address=zookeeper://localhost:2181
   #\u914D\u7F6Edubbo\u7684\u5305\u626B\u63CF\uFF0C\u9488\u5BF9dubbo\[email protected], @Reference\u6CE8\u89E3
   dubbo.scan.base-packages=com.springboot.blog.support
   #dubbo\u5065\u5EB7\u76D1\u63A7
   endpoints.dubbo.enabled=true
   management.health.dubbo.status.defaults=memory
   management.health.dubbo.status.extras=load,threadpool
   management.port=9091

服务实现类和项目入口

package com.springboot.blog.support;

import com.alibaba.dubbo.config.annotation.Service;
import com.springboot.blog.api.RpcService;

@Service(version = "1.0.0", application = "${dubbo.application.id}", protocol = "${dubbo.protocol.id}", registry = "${dubbo.registry.id}")
public class RpcServiceImpl implements RpcService {

    @Override
    public String rpc(String parame) {
        // TODO Auto-generated method stub
        return "this params is :" + parame;
    }

}
 

package com.springboot.blog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootService {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(SpringBootService.class, args);
        System.out.println("============= SpringBoot Service Start Success =============");
    }

}
 

创建一个子项目blog-web:服务消费者。(注意涉及:dubbo和springboot的集成配置)

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.zzg</groupId>
        <artifactId>blog</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>blog-web</artifactId>
    <dependencies>
        <!-- Spring Boot dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>com.zzg</groupId>
            <artifactId>blog-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

application.properties(dubbo配置文件)

spring.application.name=blog-web
server.port=8081
#dubbo\u914D\u7F6E
dubbo.application.id=blog-web
dubbo.application.name=blog-web
#\u670D\u52A1\u6CE8\u518C\u914D\u7F6E
dubbo.registry.id=my-registry
dubbo.registry.address=zookeeper://localhost:2181
management.port=8082

远程服务消费者和SpringBoot入口

package com.springboot.blog.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.springboot.blog.api.RpcService;

@RestController
@RequestMapping("/dubbo")
public class RpcController {
    @Reference(version = "1.0.0")
    private RpcService service;
    
    @RequestMapping("/rpc")
    public void rpc() {      
        System.out.println(service.rpc("rpc 远程调用"));
    }
}
 

package com.springboot.blog.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootWeb {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        SpringApplication.run(SpringBootWeb.class, args);
        System.out.println("============= SpringBoot Web Start Success =============");
    }

}
 

 

 

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号