SpringCloud Alibaba微服务实战二十一 - 整合Dubbo

简介: SpringCloud Alibaba微服务实战二十一 - 整合Dubbo

概述


在Spring Cloud构建的微服务系统中,大多数的开发者使用都是官方提供的Feign组件来进行内部服务通信,这种声明式的HTTP客户端使用起来非常的简洁、方便、优雅,但是有一点,在使用Feign消费服务的时候,相比较Dubbo这种RPC框架而言,性能较差。

虽说在微服务架构中,会讲按照业务划分的微服务独立部署,并且运行在各自的进程中。微服务之间的通信更加倾向于使用HTTP这种简答的通信机制,大多数情况都会使用REST API。这种通信方式非常的简洁高效,并且和开发平台、语言无关,但是通常情况下,HTTP并不会开启KeepAlive功能,即当前连接为短连接,短连接的缺点是每次请求都需要建立TCP连接,这使得其效率变的相当低下。

对外部提供REST API服务是一件非常好的事情,但是如果内部调用也是使用HTTP调用方式,就会显得显得性能低下,Spring Cloud默认使用的Feign组件进行内部服务调用就是使用的HTTP协议进行调用,这时,我们如果内部服务使用RPC调用,对外使用REST API,将会是一个非常不错的选择,恰巧,Dubbo Spring Cloud给了我们这种选择的实现方式。

以上内容摘自官网。

这里我觉得还有另外一个点也是需要大家考虑的,很多公司在早期已经基于dubbo构建了很多底层微服务,如果全部使用cloud架构进行迁移相对比较麻烦,如果在cloud中能直接集成dubbo就简单多了。

之前的文章我们已经实现了从Order-service使用feign调用Account-Serviice,本章内容我们来实现使用dubbo调用Account-Dubbo,最后通过JMeter对接口进行性能测试看看两者之间的性能差距。

组件调用图


实现Dubbo生产者


  • 在项目中建立服务模块 account-dubbo,在 account-dubbo中再建立两个模块 dubbo-apidubbo-provider 模块。
  • dubbo-provider的pom文件中添加Dubbo Spring Cloud的关键依赖。
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

「注意:这里不能直接使用dubbo的原生jar,并且需要引入nacos注册中心,需要将dubbo注册到springcloud的注册中心上」

  • 修改dubbo-provider 项目的配置文件application.properties
spring.cloud.nacos.discovery.server-addr = 10.0.23.48:8848
dubbo.application.id = account-dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 20881
dubbo.scan.base-packages = com.javadaily.dubbo.service
dubbo.registry.address = spring-cloud://localhost
spring.application.name = account-dubbo
dubbo.registry.check = false
dubbo.consumer.check = false
dubbo.cloud.subscribed-services = order-service

这里使用 dubbo.registry.address将dubbo注册到了springcloud的注册中心上。

  • dubbo-api中添加服务接口,为了后面的性能测试我们这里使用Account-Service一样的接口。
public interface AccountService {
    AccountDTO getByCode(String accountCode);
}


  • dubbo-provider中实现该接口(mybatis的相关配置略...)
@Service
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountMapper accountMapper;
    @Override
    public AccountDTO getByCode(String accountCode) {
        AccountDTO accountDTO = new AccountDTO();
        Account account = accountMapper.selectByCode(accountCode);
        BeanUtils.copyProperties(account,accountDTO);
        return accountDTO;
    }
}

注意这里的 @Service注解使用的是 org.apache.dubbo.config.annotation.Service,不是Spring原生的Service注解。

  • dubbo-provider中添加主启动类,并添加EnableDubbo注解
@SpringBootApplication
@EnableDubbo
public class AccountDubboApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountDubboApplication.class, args);
    }
}


  • 启动dubbo服务,查看注册中心中是否正常注册。

注册中心


Order-Service消费方修改


  • 引入dubbo相关依赖
<!--dubbo-->
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
 <groupId>com.jianzh5.cloud</groupId>
 <artifactId>dubbo-api</artifactId>
 <version>1.0.0</version>
</dependency>


  • 修改消费方配置文件,增加dubbo的配置参数
dubbo:
  registry:
    address: spring-cloud://localhost
  cloud:
    subscribed-services: account-dubbo
  consumer:
    check: false

由于 Order-Service不需要对外提供RPC服务所以这里只需要配置dubbo的注册中心即可。

通过 dubbo.cloud.subscribed-services 配置生成者的服务id,默认是 * 即注册所有,此选项建议配置。

  • 修改消费逻辑,使用dubbo调用。
@Slf4j
@RestController
public class FeignController {
    @Reference
    private AccountService accountService;
    @GetMapping("/order/getAccount/{accountCode}")
    public ResultData<AccountDTO> getAccount(@PathVariable String accountCode){
        AccountDTO accountDTO = accountService.getByCode(accountCode);
        return ResultData.success(accountDTO);
    }
}

通过 org.apache.dubbo.config.annotation.Reference 引入dubbo服务即可。

通过以上几步我们完成了SpringCloud与Dubbo的整合,大家自行测试即可。接下来我们看看两者之间的性能差异。


性能测试


测试效果是在楼主笔记本上测试的,在高配置上效果差异会更明显。

配置:Intel Core i5-7200U CPU @ 2.50GHz 2.70GHz  6核 16G内存

测试工具:JMeter5.1

线程数:1000

Ramp-Up : 10

JMeter参数

dubbo调用效果

dubbo测试效果

平均响应时间 吞吐量 最小响应时间 最大响应时间
488ms 95.8/sec 16ms 2970ms

feign调用效果

feign测试效果

平均响应时间 吞吐量 最小响应时间 最大响应时间
3213ms 75.1/sec 108ms 6097ms

通过上面的测试结果可以看出两者的性能差距,feign的性能明显落后dubbo很多,对于追求性能的应用来说还是建议使用dubbo进行RPC调用。


如果本文对你有帮助,别忘记来个三连:点赞,转发,评论咱们下期见!

收藏 等于白嫖点赞 才是真情!

目录
相关文章
|
4月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
550 127
|
4月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
345 0
|
4月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
4月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
4月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
5月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
294 1
|
Dubbo Java 应用服务中间件
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
微服务学习 | Springboot整合Dubbo+Nacos实现RPC调用
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
310 2
|
Dubbo Java 应用服务中间件
💥Spring Cloud Dubbo火爆来袭!微服务通信的终极利器,你知道它有多强大吗?🔥
【8月更文挑战第29天】随着信息技术的发展,微服务架构成为企业应用开发的主流模式,而高效的微服务通信至关重要。Spring Cloud Dubbo通过整合Dubbo与Spring Cloud的优势,提供高性能RPC通信及丰富的生态支持,包括服务注册与发现、负载均衡和容错机制等,简化了服务调用管理并支持多种通信协议,提升了系统的可伸缩性和稳定性,成为微服务通信领域的优选方案。开发者仅需关注业务逻辑,而无需过多关心底层通信细节,使得Spring Cloud Dubbo在未来微服务开发中将更加受到青睐。
240 0
|
Dubbo 应用服务中间件 Apache
Star 4w+,Apache Dubbo 3.3 全新发布,Triple X 领衔,开启微服务通信新时代
在 Apache Dubbo 突破 4w Star 之际,Apache Dubbo 团队正式宣布,Dubbo 3.3 正式发布!作为全球领先的开源微服务框架,Dubbo 一直致力于为开发者提供高性能、可扩展且灵活的分布式服务解决方案。此次发布的 Dubbo 3.3,通过 Triple X 的全新升级,突破了以往局限,实现了对南北向与东西向流量的全面支持,并提升了对云原生架构的友好性。
429 93

热门文章

最新文章