SpringCloudAlibaba 通过Dubbo实现微服务之间的RPC调用

目录

一、创建模块化项目

二、公共api接口模块

三、服务提供者

四、服务调用者

五、测试

六、案例代码


在微服务架构中,微服务之间的调用一般我们有两种比较好的解决策略,分别是通过OpenFeign的基于http协议的传输的调用和基于RCP协议的Dubbo框架来实现高效传输。对比两个策略可以清晰看到:OpenFeign更适合于向外部系统提供的服务,因为http协议的restful风格请求兼容性很好,缺点是会比RPC协议的Dubbo传输效率稍低一些,下面来看一下,在微服务架构中我们如何使用Dubbo进行远程调用吧!

一、创建模块化项目

项目结构如下:

 服务调用者和服务提供者共用api接口进行RCP调用,

服务提供者的依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- Dubbo Spring Cloud Starter -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>

        <!--引入api包-->
        <dependency>
            <groupId>com.dragonwu</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

二、公共api接口模块

 接口类会被服务提供者和服务调用者用到

public interface SayHelloService {

    MsgDto sendMsg(String msg);
}

传输数据对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MsgDto implements Serializable {

    String msg;

    Date date;
}

三、服务提供者

配置类:

server:
  port: 8001
spring:
  application:
    name: dubbo-producer-service
  cloud:
    nacos:
      password: 
      username: 
      server-addr: nacos-server
dubbo:
  protocol:
    # 协议名称
    name: dubbo
    # dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80;
    # 如果没有配置port,则自动采用默认端口,如果配置为-1,则会分配一个没有被占用的端口
    # Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增加,确保端口可控
    port: -1
  registry:
    # 前缀spring-cloud说明:挂载到spring-cloud 注册中心
    address: spring-cloud://nacos-server:8848

@DubboCompoentScan //扫描指定包下的服务类

@SpringBootApplication
@DubboComponentScan(value = {"com.dragonwu.service.impl"}) //扫描指定包下的服务类
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

@DubboService:标注此类为dubbo服务

@DubboService
public class SayHelloServiceImpl implements SayHelloService {


    @Override
    public MsgDto sendMsg(String msg) {
        return new MsgDto("通过dubbo调用后:"+msg,new Date());
    }
}

四、服务调用者

server:
  port: 8002
spring:
  application:
    name: dubbo-consumer-service
  cloud:
    nacos:
      password: 
      username: 
      server-addr: nacos-server
dubbo:
  protocol:
    # 协议名称
    name: dubbo
    port: -1
  registry:
    address: spring-cloud://nacos-server:8848
  cloud:
    # 要订阅的服务
    subscribed-services:
      - dubbo-producer-service

启动类

public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

@DubboReference:指定要消费的服务接口

@RestController
public class ConsumerController {

    @DubboReference
    private SayHelloService sayHelloService;

    @GetMapping("/sayHello/{msg}")
    public String sayHello(@PathVariable("msg") String msg){
        return sayHelloService.sendMsg(msg).toString();
    }
}

这里直接就可以调用服务提供者的对应服务了,是不是很便捷!

五、测试

启动两个服务后注册到了Nacos中:

apiPost进行测试: 

 通过服务调用者调用服务消费者的服务成功,效率也杠杠的!

六、案例代码

SpringCloudAlibaba各技术栈实现的案例代码集 我的笔记: SpringCloudAlibaba各技术栈实现的案例代码集 我的笔记 - Gitee.com

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值