searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Spring Cloud与Dubbo集成实践

2024-06-26 09:44:32
26
0

应用场景

当你的微服务体系中既有内部服务间需要高性能的RPC通信,又存在需要对外暴露RESTful API的服务时,可以使用Spring Cloud的组件(如Spring Cloud Gateway)作为API网关处理外部请求,并通过Dubbo处理内部高性能服务调用。

此外,在对性能有极高要求的核心服务上,Dubbo的高性能RPC通信能力可以提供显著优势。同时,利用Spring Cloud的其他组件(如配置管理、断路器等)来加强系统的稳定性和可维护性。

Spring Cloud介绍

定位:Spring Cloud是一个全面的微服务生态体系,提供了一系列开箱即用的组件,涵盖了服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态管理等微服务架构所需的功能。它基于Spring Boot,易于上手,与Spring生态系统高度整合。
协议:倾向于使用HTTP/RESTful作为服务间通信协议,通过Feign等组件实现服务调用,这使得服务可以跨语言调用,灵活性高,但可能牺牲部分性能。
生态环境:Spring Cloud生态丰富,支持多种注册中心(如Eureka、Consul、Zookeeper)、配置中心、监控工具等,能够快速搭建和管理复杂的微服务架构。
易用性:提供了丰富的自动化配置,减少手动配置,适合快速开发和部署。

Dubbo介绍

定位:Dubbo是一款高性能的RPC框架,专为高并发、低延迟的微服务通信设计,更侧重于服务的调用和治理,提供强大的服务治理功能,如负载均衡、服务路由、故障恢复等。
协议:默认使用Dubbo协议,这是一种高效的二进制协议,适合内部服务间通信,提供高性能的远程调用。同时,Dubbo也支持RESTful等协议。
生态环境:Dubbo虽然起初生态相对较小,但现在已逐渐丰富,特别是官方提供集成插件后,可以更好地融入Spring生态,同时保持其高性能的特性。
定制性和性能:Dubbo提供了较高的可定制性和优化空间,适合对性能有严格要求的场景。它对Java环境优化较多,特别适合Java微服务之间的通信。

集成实践

1. 引入依赖

首先,确保你的pom.xml文件中包含了Dubbo和Spring Boot Starter的依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>${spring.cloud.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>${spring.cloud.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>com.alibaba.spring.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>${dubbo-spring-boot-starter.version}</version>
    </dependency>
    <!-- Zookeeper客户端 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
    </dependency>
</dependencies>

2. 配置Dubbo和Zookeeper

在application.yml文件中添加如下配置Dubbo和Spring Cloud以使用Zookeeper作为注册中心,以及配置Gateway路由:

spring:
  application:
    name: your-service-name
  cloud:
    zookeeper:
      connect-string: ${zookeeper.address}
      discovery:
        enabled: true
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: service-route
          uri: lb://your-service-name 
          predicates:
            - Path=/api/**
          filters:
            - StripPrefix=1 # 如果你的API路径需要去除前缀,例如/api/去掉,可以使用此过滤器
dubbo:
  application:
    name: ${spring.application.name}
    metadata-type: remote # 在低版本dubbo中,metadata-type默认为local,会导致dubbo实例元数据获取失败,配置为remote即可解决,或者用高版本dubbo
  registry:
    address: zookeeper://${zookeeper.address}
    parameters:
      rootPath: /dubbo/services #这里指定dubbo服务注册到zookeeper的根路径,是为了避免与注册到zookeeper的spring cloud实例冲突,产生class cast异常
  protocol:
    name: dubbo
    port: -1 # 让Dubbo自动分配端口

# 如果你直接配置了Zookeeper地址,则需要在这里指定
zookeeper:
  address: 127.0.0.1:2181

3. 启用Dubbo服务

在服务实现类上添加@EnableDubbo注解,并指定接口和协议:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo(scanBasePackages = "com.example.your.service.package")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4. Dubbo服务接口与实现

定义Dubbo服务接口并实现它,确保服务接口和实现类被Spring管理,并且服务接口上有正确的@DubboService注解。

// 服务接口
public interface YourService {
    String sayHello(String name);
}

// 服务实现
@DubboService(interfaceClass = YourService.class)
public class YourServiceImpl implements YourService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

总结

通过上述配置,我们成功地将Dubbo和Spring Cloud整合在一起,实现了微服务架构的高性能RPC通信,兼顾使用Spring Cloud生态中的Gateway组件与外部达到负载均衡的通讯。


0条评论
0 / 1000
梁****勇
3文章数
0粉丝数
梁****勇
3 文章 | 0 粉丝
梁****勇
3文章数
0粉丝数
梁****勇
3 文章 | 0 粉丝
原创

Spring Cloud与Dubbo集成实践

2024-06-26 09:44:32
26
0

应用场景

当你的微服务体系中既有内部服务间需要高性能的RPC通信,又存在需要对外暴露RESTful API的服务时,可以使用Spring Cloud的组件(如Spring Cloud Gateway)作为API网关处理外部请求,并通过Dubbo处理内部高性能服务调用。

此外,在对性能有极高要求的核心服务上,Dubbo的高性能RPC通信能力可以提供显著优势。同时,利用Spring Cloud的其他组件(如配置管理、断路器等)来加强系统的稳定性和可维护性。

Spring Cloud介绍

定位:Spring Cloud是一个全面的微服务生态体系,提供了一系列开箱即用的组件,涵盖了服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态管理等微服务架构所需的功能。它基于Spring Boot,易于上手,与Spring生态系统高度整合。
协议:倾向于使用HTTP/RESTful作为服务间通信协议,通过Feign等组件实现服务调用,这使得服务可以跨语言调用,灵活性高,但可能牺牲部分性能。
生态环境:Spring Cloud生态丰富,支持多种注册中心(如Eureka、Consul、Zookeeper)、配置中心、监控工具等,能够快速搭建和管理复杂的微服务架构。
易用性:提供了丰富的自动化配置,减少手动配置,适合快速开发和部署。

Dubbo介绍

定位:Dubbo是一款高性能的RPC框架,专为高并发、低延迟的微服务通信设计,更侧重于服务的调用和治理,提供强大的服务治理功能,如负载均衡、服务路由、故障恢复等。
协议:默认使用Dubbo协议,这是一种高效的二进制协议,适合内部服务间通信,提供高性能的远程调用。同时,Dubbo也支持RESTful等协议。
生态环境:Dubbo虽然起初生态相对较小,但现在已逐渐丰富,特别是官方提供集成插件后,可以更好地融入Spring生态,同时保持其高性能的特性。
定制性和性能:Dubbo提供了较高的可定制性和优化空间,适合对性能有严格要求的场景。它对Java环境优化较多,特别适合Java微服务之间的通信。

集成实践

1. 引入依赖

首先,确保你的pom.xml文件中包含了Dubbo和Spring Boot Starter的依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>${spring.cloud.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>${spring.cloud.version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
        <version>${dubbo.version}</version>
    </dependency>
    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>com.alibaba.spring.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>${dubbo-spring-boot-starter.version}</version>
    </dependency>
    <!-- Zookeeper客户端 -->
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>${curator.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>${curator.version}</version>
    </dependency>
</dependencies>

2. 配置Dubbo和Zookeeper

在application.yml文件中添加如下配置Dubbo和Spring Cloud以使用Zookeeper作为注册中心,以及配置Gateway路由:

spring:
  application:
    name: your-service-name
  cloud:
    zookeeper:
      connect-string: ${zookeeper.address}
      discovery:
        enabled: true
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
        - id: service-route
          uri: lb://your-service-name 
          predicates:
            - Path=/api/**
          filters:
            - StripPrefix=1 # 如果你的API路径需要去除前缀,例如/api/去掉,可以使用此过滤器
dubbo:
  application:
    name: ${spring.application.name}
    metadata-type: remote # 在低版本dubbo中,metadata-type默认为local,会导致dubbo实例元数据获取失败,配置为remote即可解决,或者用高版本dubbo
  registry:
    address: zookeeper://${zookeeper.address}
    parameters:
      rootPath: /dubbo/services #这里指定dubbo服务注册到zookeeper的根路径,是为了避免与注册到zookeeper的spring cloud实例冲突,产生class cast异常
  protocol:
    name: dubbo
    port: -1 # 让Dubbo自动分配端口

# 如果你直接配置了Zookeeper地址,则需要在这里指定
zookeeper:
  address: 127.0.0.1:2181

3. 启用Dubbo服务

在服务实现类上添加@EnableDubbo注解,并指定接口和协议:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;

@SpringBootApplication
@EnableDubbo(scanBasePackages = "com.example.your.service.package")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4. Dubbo服务接口与实现

定义Dubbo服务接口并实现它,确保服务接口和实现类被Spring管理,并且服务接口上有正确的@DubboService注解。

// 服务接口
public interface YourService {
    String sayHello(String name);
}

// 服务实现
@DubboService(interfaceClass = YourService.class)
public class YourServiceImpl implements YourService {
    @Override
    public String sayHello(String name) {
        return "Hello, " + name;
    }
}

总结

通过上述配置,我们成功地将Dubbo和Spring Cloud整合在一起,实现了微服务架构的高性能RPC通信,兼顾使用Spring Cloud生态中的Gateway组件与外部达到负载均衡的通讯。


文章来自个人专栏
软件开发与微服务
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0