微服务框架-SpringCloud整合Dubbo宝典

一、前言:

      首先,在介绍SpringCloud整合Dubbo框架之前,先思考一个问题,SpringCloud,Dubbo都是比较优秀的微服务框架,为啥两者之间还需要整合????

      我直接回答了,苦笑一声!  两者从通信的性能上来分析,SpringCloud的通信采用Openfeign(feign)组件,底层实现是rest,从OSI 7层模型上来看rest属于应用层;Dubbo框架的通信协议采用RPC协议,属于传输层协议,性能上自然比rest高,具体对比,参考下面这个表格:

      RPC                                     VS                         REST
1、耦合性 强耦合 松耦合
2、消息协议 二进制 thrift/protobuf 文本 xml、jason
3、通信协议 TCP HTTP
4、接口契约IDL thrift/protobuf swagger
5、开发调试 消息不可读 可读,可调试
6、对外开放 一般作为内部各个系统的通信框架 对接外部系统

      SpringCloud整合Dubbo,正所谓是强强联合,接下来给大家介绍一下具体整合的方法:

 

二、代码示例:

微服务框架-SpringCloud整合Dubbo宝典_第1张图片

1、 服务端接口契约:

      新建一个maven  quickstart项目:spring-cloud-dubbo-api

      定义服务端与客户端的接口契约,并打包成jar包,安装到私有仓库,供客户端与服务端依赖使用。

package com.jason.dubbo.springcloud;

/**
 * @program: springcloud-dubbo
 * @description
 * @author: 大龄程序猿
 * @create: 2020-08-10 23:42
 **/
public interface ISayHelloService {
      String   hello();
}

2、 服务端服务开发:

      新建一个maven  springboot项目:spring-cloud-dubbo-provider

      实现定义好的接口,并将服务注册到服务注册中心(这里采用nacos),老铁们也可以采用ZK,dubbo还可以支持多注册中心,后面单独起个篇幅来介绍多注册中心。

package com.jason.dubbo.springcloud.springclouddubboprovider.service;

import com.jason.dubbo.springcloud.ISayHelloService;
import org.apache.dubbo.config.annotation.Service;

/**
 * @program: springcloud-dubbo
 * @description
 * @author: 大龄程序猿
 * @create: 2020-08-10 23:44
 **/

@Service
public class SayHelloServiceImpl  implements ISayHelloService {
    @Override
    public String hello() {
        return   "hello  Spring-cloud-dubbo";
    }
}
//@Service注解不是spring的,这里使用的dubbo框架的,后续dubbo升级版本中,为了不引起大家的误解,已经更换成@dubboservice

application.properties

spring.application.name=spring-cloud-dubbo-providers

# dubbo 服务扫描基础包路径
dubbo.scan.base-packages=com.jason.dubbo.springcloud.springclouddubboprovider.service
# Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.name=dubbo
dubbo.protocol.port=20882

spring.cloud.nacos.discovery.server-addr=192.168.213.102:8848

pom.xml




    
        springcloud-dubbo
        com.jason.dubbo.springcloud
        1.0-SNAPSHOT
    
    4.0.0
    com.jason.dubbo.springcloud
    spring-cloud-dubbo-provider
    0.0.1-SNAPSHOT
    spring-cloud-dubbo-provider
    Demo project for Spring Boot

    
        1.8
        UTF-8
        UTF-8

    

    

        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        
        
            com.jason.dubbo.springcloud
            spring-cloud-dubbo-api
            1.0-SNAPSHOT
        
        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
            2.2.1.RELEASE
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            2.2.1.RELEASE
        
    



    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.0.RELEASE
                
                    
                        com.jason.dubbo.springcloud.springclouddubboprovider.SpringCloudDubboProviderApplication
                    
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    


3、 客户端开发:

      新建一个maven  quickstart项目:spring-cloud-dubbo-consumer

 手写过RPC框架的同学,应该都知道,客户端通过服务端的接口契约可以调用服务端的接口,其实是采用动态代理的方式,dubbo中默认采用javasist,大家不妨debug一下:

@Reference 作用就是将动态代理注入进来

package com.jason.dubbo.springcloud.springclouddubboconsumer;

import com.jason.dubbo.springcloud.ISayHelloService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringCloudDubboConsumerApplication {

    @Reference
    ISayHelloService   sayHelloService;
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudDubboConsumerApplication.class, args);
    }
    @GetMapping("/say")
    public   String  say()
    {
        return  sayHelloService.hello();
    }

}

 

application.properties

spring.application.name=spring-cloud-dubbo-consumer
spring.cloud.nacos.discovery.server-addr=192.168.213.102:8848

pom.xml



    4.0.0
    com.jason.dubbo.springcloud
    spring-cloud-dubbo-consumer
    0.0.1-SNAPSHOT
    spring-cloud-dubbo-consumer
    Demo project for Spring Boot
    
        springcloud-dubbo
        com.jason.dubbo.springcloud
        1.0-SNAPSHOT
    
    
        1.8
        UTF-8
        UTF-8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter
        
        
            com.jason.dubbo.springcloud
            spring-cloud-dubbo-api
            1.0-SNAPSHOT
        
        
            com.alibaba.cloud
            spring-cloud-starter-dubbo
            2.2.1.RELEASE
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
            2.2.1.RELEASE
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.1
                
                    1.8
                    1.8
                    UTF-8
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.3.0.RELEASE
                
                    
                        com.jason.dubbo.springcloud.springclouddubboconsumer.SpringCloudDubboConsumerApplication
                    
                
                
                    
                        repackage
                        
                            repackage
                        
                    
                
            
        
    


三、Demo调试:

通过nacos后台页面,可以观测,服务已经正常注册:

微服务框架-SpringCloud整合Dubbo宝典_第2张图片

客户端发起调用:

微服务框架-SpringCloud整合Dubbo宝典_第3张图片

最近时间不够用,几乎是挤睡觉时间出来,整理一些学习心得,希望对老铁们有帮助!!!

 

 

 

你可能感兴趣的:(分布式架构,Dubbo,SpringCloud)