SpringCloud之Dubbo

SpringCloud之Dubbo

1.简介

Apache Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

由于dubbo是针对二进制处理,所以效率最高。

2.SpringCloud集成Dubbo

注意事项

由于Dubbo语法不同于OpenFeign,OpenFeign只需要发现服务然后创建的方法与需要使用的一致即可。

Dubbo需要使用时需要保证有一个公共的微服务提供接口,生产者需要实现接口以及方法,消费者只需要调用方法即可。

本文使用的是nacos作为注册中心。

在这里插入图片描述

公共类编写

public interface DiscoveryService {

    Integer getCount();

}

生产者

1.导入Maven依赖
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <!-- springBoot集成dubbo的依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!-- 微服务中依赖 -->
        <dependency>
            <groupId>com.quick</groupId>
            <artifactId>common-api</artifactId>
            <version>1.0.0</version>
        </dependency>
2.配置文件编写

bootstrap.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        refresh-enabled: true
        file-extension: yaml
        namespace: 3a22c228-8b7d-4e37-b68b-2014a5b3349f
  application:
    name: test
server:
  port: 8081
dubbo:
  application:
    name: test
  registry:
    address: nacos://127.0.0.1:8848
  # 配置dubbo的连接,dubbo的连接是长时间有效的websocket请求
  protocol:
    name: dubbo
    port: 20880

3.编写启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableDubbo
public class NacosApplication {

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

}

EnableDiscoveryClient主要是为了将服务自动配置到nacos中

EnableDubbo主要是为了激活dubbo的配置,会扫描dubbo的接口类。

4.编写dubbo服务
@Component
@DubboService(version = "1.0.0",interfaceClass = DiscoveryService.class)
public class DiscoveryServiceImpl implements DiscoveryService {

    @Value("${test.count}")
    private Integer count;


    @Override
    public Integer getCount() {
        return count;
    }

}

注意事项

之前使用dubbo的注解为@Service

2.7以上版本已经不推荐使用了,由于与spring的注解@Service不太好区分,进行了调整。

5.启动服务

在这里插入图片描述

消费者

1.导入Maven依赖
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>com.quick</groupId>
            <artifactId>common-api</artifactId>
            <version>1.0.0</version>
        </dependency>
2.配置文件编写
server:
  port: 8088
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: dubbo
dubbo:
  application:
    name: dubbo
  registry:
    address: nacos://127.0.0.1:8848
  protocol:
    name: dubbo
    port: 20881

注意事项

消费者的dubbo端口不能与生产者dubbo端口一致,dubbo相当于一个额外的服务。

3.编写启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableDubbo
public class DubboApplication {

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

}
4.编写调用controller
@RestController
@RequestMapping("/test")
public class TestController {

    @DubboReference(version = "1.0.0",interfaceClass = DiscoveryService.class)
    private DiscoveryService discoveryService;

    @GetMapping
    public Integer get(){
        return discoveryService.getCount();
    }

}

在消费者端,使用 @DubboReference 注解可以声明一个对Dubbo服务的引用。这个注解告诉Dubbo框架,在需要远程调用服务时,应该通过Dubbo协议与注册中心(比如Nacos)获取提供者的地址,并将其动态注入到当前的微服务中。

5.启动服务

在这里插入图片描述

当 Dubbo 服务启动时,它会自动将服务的提供者信息注册到 Nacos 中,并且如果配置了消费者(即引用了其他 Dubbo 服务),也会将消费者的信息注册到 Nacos 中。

OpenFeign跟Dubbo的区别

  1. 通信协议:
    • Dubbo: 默认使用自定义的Dubbo协议进行通信,这是一种二进制的RPC协议,专门设计用于高效的服务调用。Dubbo也支持其他协议如HTTP和REST,但主打的还是高性能的Dubbo协议。
    • OpenFeign: 主要基于HTTP协议,通过HTTP请求和响应进行通信。它更适合与遵循RESTful风格的服务集成和通信。
  2. 服务治理:
    • Dubbo: 提供了完善的服务治理能力,包括服务注册与发现、负载均衡、服务降级、容错处理(如重试、容错集群、快速失败等)、服务监控等。Dubbo可以对服务进行精细的管理和控制。
    • OpenFeign: 主要专注于简化HTTP请求的编写和调用,对于服务治理的支持相对有限。OpenFeign通常与服务发现工具(如Eureka、Consul等)结合使用,但本身并不提供完整的服务治理功能。
  3. 使用场景:
    • Dubbo: 更适合构建传统的面向服务的架构,特别是在大规模的分布式系统中,对服务的高性能、高可用和服务治理需求较为突出的场景。
    • OpenFeign: 更适合构建基于RESTful API的微服务架构,用于简化和标准化HTTP API的调用,尤其是在前后端分离、微服务化程度较高的场景中使用较多。
      n通常与服务发现工具(如Eureka、Consul等)结合使用,但本身并不提供完整的服务治理功能。
  4. 使用场景:
    • Dubbo: 更适合构建传统的面向服务的架构,特别是在大规模的分布式系统中,对服务的高性能、高可用和服务治理需求较为突出的场景。
    • OpenFeign: 更适合构建基于RESTful API的微服务架构,用于简化和标准化HTTP API的调用,尤其是在前后端分离、微服务化程度较高的场景中使用较多。
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值