Spring Cloud Alibaba微服务内部Dubbo RPC通信

本文介绍了在SpringCloud架构下,如何通过集成DubboRPC提升内部服务调用的效率。首先,解释了为什么选择Dubbo作为内部通信方案,因为它能解决HTTP短连接带来的性能问题。接着,详细阐述了从定义服务接口、服务提供到服务调用的整个流程,包括在项目结构、服务实现、依赖引入和配置文件方面的具体操作。最后,展示了如何在服务调用方通过@Reference注解实现服务调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么要集成Dubbo RPC

        在国内建设微服务有Dubbo和Spring Cloud两种主流方案可供选择。Dubbo是服务治理与RPC实现方案(可能理解为一个分布式通信框架),虽然在国内有着非常大的用户群体,但是其周边设施与组件相对来说并不那么完善。而Spring Cloud则是一套完整的分布式微服务架构解决方案,很多开发者更希望享受Spring cloud全家桶生态。

        在Spring Cloud构建的微服务系统中,大多数的开发者使用都是官方提供的Feign组件来进行内部服务通信。这种声明式的HTTP客户端使用起来非常的简洁、方便、优雅,并且和开发平台、语言无关,但是通常情况下,HTTP并不会开启KeepAlive功能,即当前连接为短连接,短连接的缺点是每次请求都需要建立TCP连接,这使得其效率变的相当低下,对外部提供REST API服务是一件非常好的事情,但是如果内部调用也是使用HTTP调用方式,就会显得显得性能低下。这时,我们如果内部服务使用RPC调用,对外使用REST API,将会是一个非常不错的选择。

        Spring Cloud Alibaba的出现,使用Nacos作为服务发现与注册,同时兼容使用Feign的HTTP方式和使用Dubbo的RPC方式调用,Spring Cloud使用内部的RPC协议调用几乎就可以零成本完成改造。

 

 

        RPC属于动态代理,有服务生产端和消费端,生产端基于代理接口提供服务,消费端基于代理接口完成远程过程调用,所以Spring Cloud内部实现Dubbo RPC通信分为定义服务接口、提供服务和服务调用3个步骤完成。

示例代码工程视图如下:

|vtom

|------vtom-common

   |----vtom-common-beans

     |----vtom-common-...

|------vtom-cloud

   |----vtom-cloud-gateway

     |----vtom-cloud-...

|------vtom-api

     |----vtom-api-sample(服务接口)

     |----vtom-api-...

|------vtom-service

     |----vtom-service-sample-provider(服务提供)

     |----vtom-service-sample-consumer(服务调用)

     |----vtom-service-...

 

二、定义服务接口

        由于服务接口是服务提供和服务调用双方的依据,所以在开发上将服务接口定义为一个单独的代码工程(vtom-api-sample),服务提供和服务调用均需要依赖这个代码工程。

package com.vtom.dubbo;

public interface ISampleDubbo  {

String sayHello(String name);

}

        在该工程父亲工程(vtom-api)的pom.xml中引入Dubbo相关依赖包:

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-dubbo</artifactId>

</dependency>

三、服务提供

        服务提供者为单独的代码工程(vtom-service-sample-provider),实现上面定义的服务接口。这里要注意的是需要使用Dubbo的@Service注解org.apache.dubbo.config.annotation.Service将服务接口的实现注册为Dubbo服务。

3.1、实现服务接口

 

package com.vtom.dubbo.provider;

 

import org.apache.dubbo.config.annotation.Service;

import com.vtom.dubbo.ISampleDubbo;

@Service

public class SampleDubboProvider implements ISampleDubbo {

@Override

public String sayHello(String name) {

return “Hello ,”+name;

}

}

3.2、添加接口依赖

在该工程的pom.xml中引入服务接口定义依赖工程包:

<dependency>

<groupId>${project.groupId}</groupId>

<artifactId>vtom-api-sample</artifactId>

<version>${project.version}</version>

</dependency>

3.3、增加Dubbo配置

在工程配置文件中增加Dubbo服务注册相关配置:

spring:

  application:

    name: vtom-service-sample-provider

  cloud:

    nacos:...

#服务器端口

server:

  port: ${random.int[10000,20000]}  

....

#Dubbo RPC配置

dubbo:

  scan:

    #dubbo 服务扫描基准包

    base-packages: com.vtom.dubbo

  protocol:

    #dubbo 协议

    name: dubbo

    #dubbo 协议端口( -1 表示自增端口,从 20880 开始)

    port: -1

  registry:

    #挂载到 Spring Cloud 注册中心

address: spring-cloud://localhost

...

四、服务调用

服务调用者为单独的代码工程(vtom-service-sample-consumer),通过@Reference注解服务接口即可实现服务调用。

3.1、调用接口

 

package com.vtom.service.impl;

 

import org.apache.dubbo.config.annotation.Reference;

import org.springframework.stereotype.Service;

import com.vtom.dubbo.ISampleDubbo;

import com.vtom.service.ISampleService;

@Service

public class SampleServiceImpl implements ISampleService {

@Reference

private ISampleDubbo sampleDubbo;

 

@Override

public String sayHello(String name) {

return this.sampleDubbo.sayHello(name);

}

}

3.2、添加接口依赖

在该工程的pom.xml中引入服务接口定义依赖工程包:

<dependency>

<groupId>${project.groupId}</groupId>

<artifactId>vtom-api-sample</artifactId>

<version>${project.version}</version>

</dependency>

3.3、增加Dubbo配置

在工程配置文件中增加Dubbo服务注册相关配置:

spring:

  application:

    name: vtom-service-sample-consumer

  cloud:

    nacos:...

#服务器端口

server:

  port: ${random.int[10000,20000]}  

....

#Dubbo RPC配置

dubbo:

  scan:

    #dubbo 服务扫描基准包(Dubbo提供者配置)

    base-packages: com.vtom.dubbo

  protocol:

    #dubbo 协议

    name: dubbo

    #dubbo 协议端口( -1 表示自增端口,从 20880 开始)

    port: -1

  registry:

    #挂载到 Spring Cloud 注册中心

address: spring-cloud://localhost

cloud:

  #指定被调用的服务,多个使用逗号分隔,不建议使用*号

subscribed-services: vtom-service-sample-provider

...

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值