首页 > 其他分享 >Spring Cloud Alibaba-服务间通信-学习笔记

Spring Cloud Alibaba-服务间通信-学习笔记

时间:2023-06-14 23:12:55浏览次数:40  
标签:服务 Seata Spring Alibaba 间通信 RocketMQ Cloud 分布式

目录

Spring Cloud Alibaba学习笔记

简介

Spring Cloud Alibaba 是一个分布式应用架构解决方案,它是基于 Spring Cloud 和阿里巴巴的一些组件构建的。而 Spring Cloud Alibaba 中包含了许多常用的中间件组件,下面是这些组件的用途和区别:

  1. Nacos: 用作服务注册与发现中心,包括服务的服务的注册、发现、配置等一系列的服务管理功能。与Consul/RabbitMQ/Zookeeper等功能类似,但更加轻量化,且提供了更加方便、易用的API。
  2. Sentinel: 用于熔断降级、限流请求等管理,防止底层服务层的不可控因素影响到了整个服务群体,是一个容错和健康监控的工具类。
  3. RocketMQ: 是一种分布式的、非阻塞式的消息队列服务,它主要解决异步处理和流量削峰的问题,是分布式异步消息通信的重要组件。
  4. Dubbo: 是一种高性能的服务框架,主要用于提供分布式应用中的各种RPC服务,特别是在高并发大数据处理中具有重要的作用。
  5. Seata: 是阿里巴巴开源的一种分布式事务解决方案,用于解决分布式事务的问题,保证了数据的一致性和事务的可靠性。
  6. Alibaba Cloud OSS: 是阿里云对象存储服务,用于存储不同类型的对象,包括文件、图片、视频等多种类型的数据。

服务间通信

seatra rockermq dubbo 的区别

Seata、RocketMQ和Dubbo都是一些用于服务间通信的中间件组件,但它们的主要作用和特点有所不同:

  1. Seata主要致力于解决业务应用中面临的分布式事务问题,能够保证数据的一致性和服务的可靠性。Seata依赖于底层数据存储,为整个分布式系统提供一个高效稳定的分布式的事务管理机制。
  2. RocketMQ是一种分布式消息服务,主要用于异步消息的传递和处理。RocketMQ具有高性能、高可用性、消息可靠性强等优点,可以在分布式环境下保证消息的及时处理和可靠性。
  3. Dubbo是一个高性能的服务框架,主要用于提供分布式应用中的各种RPC服务,因此采用的通信协议是基于TCP的。Dubbo的主要作用是提供分布式服务的注册、发现、负载均衡和容错等功能,主要解决的问题是分布式系统中的服务治理。

尽管这些中间件组件都被用于服务间通信,但是它们的定位和功能略有不同,可以根据实际应用场景选择相应的中间件来进行服务间通信。例如,如果应用领域中有大量的事务、需要长时间持续地交互、要求保证数据的一致性和可靠性,使用Seata是比较明智的;如果应用领域中有大量的消息处理需求、对消息的准确传递和处理有着较为严格的要求,使用RocketMQ是比较明智的;如果需要较高的性能、需要对集群的自动化管理、需要微服务系统中的服务治理等,使用Dubbo是比较明智的选择。

具体的使用场景和区别

Seata

Seata主要用于解决分布式业务场景中的事务问题,它可以提供类似于本地事务的方式来进行多个服务之间的事务处理,确保数据的一致性和服务的可靠性。建议在分布式事务处理方面使用Seata,例如金融、电商等需要依赖于大量事务处理的场景。

RocketMQ

RocketMQ主要用于异步消息的传递和处理,类似于消息中间件。它可以在分布式环境下保证消息的及时处理和可靠性,并且RocketMQ提供了多种消息传递模式,可以根据业务需求进行选择。建议在分布式异步消息处理方面使用RocketMQ,例如App推送、支付通知等需要异步消息处理的场景。

Dubbo

Dubbo是一种高性能的服务框架,主要用于提供分布式应用中的各种RPC服务。Dubbo提供了服务治理功能,例如服务的注册、发现、路由、负载均衡和容错等功能,可以提供高可用的分布式服务。建议在需要进行服务逻辑可拆分,或者存在很多交互的情况下使用Dubbo,例如电商网站会员、购物车等应用中需要RPC服务的场景。
综上所述,最终选择使用Seata、RocketMQ或Dubbo还是要根据具体的业务需求来进行决策。具体应用场景需要根据需求而定,比如需要强一致性,选择Seata;需要异步消息处理,选择RocketMQ;需要RPC服务和服务治理,选择Dubbo。当然,在实际应用中,也可以根据需要同时使用多种中间件组合来达到更好的效果。

技术选型

Spring Cloud Stream、RabbitMQ、RocketMQ、Seata 均为微服务的相关框架或工具,但每个工具的使用场景和特点不同,需要根据具体情况进行选择。下面是它们的区别和选择建议:

  1. Spring Cloud Stream:
    • Spring Cloud Stream 是 Spring Cloud 的一部分,它提供一种用于构建消息驱动型微服务的框架,可以让开发者不用关心细节,只需关心数据处理,将数据处理和消息转换解耦。
    • Spring Cloud Stream 可以使用多个消息中间件系统来传递消息,包括 RabbitMQ、Kafka、Apache RocketMQ 等等。
    • 使用 Spring Cloud Stream 可以方便的配置消息通道,同时支持云原生场景下的流式处理和事件驱动架构。
    • 建议在 Spring Cloud 环境下,或需要快速搭建消息通道的业务场景中使用 Spring Cloud Stream。
  2. RabbitMQ:
    • RabbitMQ 是一款开源的基于 AMQP(高级消息队列协议)的消息中间件,支持广泛的编程语言和运行环境。
    • RabbitMQ 提供了可靠的消息传递机制、灵活的路由策略、丰富的插件机制、高效的消息持久化等特点。
    • RabbitMQ 的使用比较简单,可以提供多种编程语言的客户端支持。
    • 建议在需要高性能和高可靠性的业务场景中使用 RabbitMQ。
  3. Apache RocketMQ:
    • Apache RocketMQ 是阿里巴巴开源的一款分布式消息中间件,具有高性能、高吞吐量、可靠性强等特点。
    • RocketMQ 延迟消息、事务消息、批量消息等特性较为突出。
    • RocketMQ 已经被广泛应用于阿里集团各大 BU 系统中,并且被大量企业作为可靠的消息中间件进行部署。
    • 建议在以阿里系产品为主要技术栈或希望使用开源的消息中间件中使用 RocketMQ。
  4. Seata:
    • Seata 是一款开源的分布式事务解决方案,提供高性能和高可靠性。
    • Seata 可以与 Spring Cloud、Dubbo、RocketMQ 等多个场景进行良好的兼容。
    • Seata 提供了全局事务管理、幂等性等机制,可以很好的保证分布式事务的数据一致性。
    • 建议在需要保证分布式事务一致性的业务场景中使用 Seata。

至于为什么没有使用 Spring Cloud Alibaba 自带的 RocketMQ 是因为,虽然 Spring Cloud Alibaba 对 RocketMQ 进行了深度集成,但是在使用过程中会有一定的限制。比如默认情况下只能使用集群模式,不能使用广播模式;配置也比较复杂,需要在多个配置文件中进行配置。因此,针对具体的业务场景和需求,选择合适的消息中间件或事务解决方案是比较重要的。

标签:服务,Seata,Spring,Alibaba,间通信,RocketMQ,Cloud,分布式
From: https://www.cnblogs.com/AJun816/p/17481588.html

相关文章

  • springboot+elementUI
    功能简介后端用springboot实现数据库的增删改查,前端用vue中的elementUI编写,实现简单的数据展示和增删改。环境准备1.vue环境vue安装:https://www.cnblogs.com/xiaozhaoboke/p/16888421.html安装好后打开vueui进入项目管理器,创建项目添加elementUI插件和axios插件2......
  • spring中用到哪些设计模式
     1.工厂模式,这个很明显,在各种BeanFactory以及ApplicationContext创建中都用到了;2.模版模式,这个也很明显,在各种BeanFactory以及ApplicationContext实现中也都用到了;3.代理模式,在Aop实现中用到了JDK的动态代理;4.单例模式,这个比如在创建bean的时候。5.Tomcat中有很多场景都使......
  • springboot-feign接口压缩异常
    WARNorg.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver-Resolved[org.springframework.http.converter.HttpMessageNotReadableException:JSONparseerror:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\......
  • SpringBoot使用自定义的logback日志
    1.介绍描述:主要由三个模块构成logback-core:核心代码块(不介绍)logback-classic:实现了slf4j的api,加入该依赖可以实现log4j的api。logback-access:访问模块与servlet容器集成提供通过http来访问日志的功能(也就是说不需要访问服务器,直接在网页上就可以访问日志文件,实现HTTP访问......
  • SpringBoot使用自定义日志注解,配置切面
    1.使用技巧以下是需要注意的部分:在环绕通知中使用ProceedingJoinPoint,控制目标方法的运行。在其他通知类型中使用JoinPoint。如果使用JoinPoint则必须位于参数的第一位。ProceedingJoinPoint中有特殊的方法proceed()。当有多个切面时,使用@Order(11)来指定注解的优先级。......
  • 根据不同场景(是否需要连接数据库)启动SpringBoot
    1.场景描述描述:使用场景:项目中的一部分业务不需要进行数据库操作,当只使用这部分功能时,希望程序启动时可以不进行数据库的连接项目中需要数据库相关的业务时再进行配置注意:Springboot在启动时会根据pom.xml启动器来判断是否开启相应的自动配置解决方式:设置一个包......
  • SpringCache-KeyGenerator
    实际项目中,如果使用统一的key的生成方式,可以自定义KeyGenerator。参考如下代码:点击查看代码@BeanpublicKeyGeneratorkeyGenerator(){returnnewKeyGenerator(){@OverridepublicObjectgenerate(Objecttarget,Methodmeth......
  • SpringCache的常用注解-@CacheEvit
    从缓存中移除相应的数据,触发缓存删除操作value:缓存名称key:缓存的key规则,可以使用SpringEL,默认是方法参数组合beforeInvocation:缓存的清除在方法调用之前执行还是之后执行,默认为false参考如下代码:点击查看代码@Override@CacheEvict(value={"query1"},key=......
  • SpringSecurity6.0学习常见问题
    环境SpringSecurity6.1版本SpringBoot3.1版本常见问题oauth2客户端请求oauth授权端,响应401检查spring.security.oauth2.client.registration.login-client.client-secret的值很spring.security.oauth2.authorizationserver.client.login-client.registration.client-secret......
  • 【SpringBoot】注解
    Controller-@RestController-@RequestMapping("/path")Controller内方法@GetMapping("/path/{xxx}")@PostMapping("/path")POST处理函数参数@RequestBody//将Json体参数值按照参数名传入类内对应字段中GET处理函数参数@PathVariable//按名称获取请求路径中的变......