> 文档中心 > 不好意思断更挺长时间可能springCloud不会再更新了,让我们来学习springCloudAlibaba

不好意思断更挺长时间可能springCloud不会再更新了,让我们来学习springCloudAlibaba


为什么不更新springCloud了

随着技术的迭代更新,springCloud对应的组件也在进行着更新和停止更新服务,所以为了针对这一情况,国内的大多数企业选择提前准备,所以springCloudAlibaba就出世了

springCloudAlibaba的优势

Spring Cloud Alibaba其实是阿里的微服务解决方案,是阿里巴巴结合自身微服务实践,开源的微服务全家桶,在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如:Eureak,zuul等。所以Spring Cloud Alibaba很有可能成为Spring Cloud第二代的标准实现,所以许多组件在业界逐渐开始使用,已有很多成功案例。值得一提的是Spring Cloud Alibaba对Dubbo做了很好的兼容,同时也提供了一些强大的功能,如 Sentinel 流控 ,Seata 分布式事务,Nacos 服务发现与注册等等。

springCloudAlibaba的五大组件

Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud OSS: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

接下来我先说一下springCloudAlibaba中的rocketMQ

首先rocketMQ分为了服务端和客户端,客户端向服务端发送消息,服务端处理消息.说到这里肯定很多小伙伴会想到了事务,因为是分布式框架所以处理事务肯定有遇到问题,这时候rocketMQ的作用就来了.
首先向rocketMQ发送需要事务的信息json

JSONObject jsonObject = new JSONObject();    jsonObject.put("accountChange","需要事务的东西"); Message<String> message = MessageBuilder.withPayload(jsonObject.toJSONString()).build(); // 向rocketMQ服务端要处理的对象json消息 TransactionSendResult ta = rocketMQTemplate.sendMessageInTransaction("producer_group_txmsg_bank1","topic_txmsg",message,null);

然后rocketMQ的客户端中在监听发送信息的监听器中处理事务一

Component@RocketMQTransactionListener(txProducerGroup = "producer_group_txmsg_bank1")public class ProducerTxmsgListener implements RocketMQLocalTransactionListener {    // 消息发送成功回调此方法,此方法执行本地事务//    @Override    public RocketMQLocalTransactionState executeLocalTransaction(Message message, Object arg) {// 犹豫更新版本后checkLocalTransaction方法将无法起到作用,所以我们统一在这个方法中进行事务的执行,回滚和提交// TODO 首先将对象String jsonString = new String((byte[]) message.getPayload());//JSONObject jsonObject = JSONObject.parseObject(jsonString);// 然后取出json中的数据执行本地事务,也就是事务一// 执行完事务一后我们根据执行的程度来确定返回的值// RocketMQLocalTransactionState.COMMIT 提交事务一// RocketMQLocalTransactionState.ROLLBACK 回滚事务一// RocketMQLocalTransactionState.UNKNOWN 不确定事务一的状态需要回查 return RocketMQLocalTransactionState.COMMIT;    }    // 回查方法只有在executeLocalTransaction返回状态为RocketMQLocalTransactionState.UNKNOWN时回查方法才会执行有10多秒的延迟    @Override    public RocketMQLocalTransactionState checkLocalTransaction(Message message) { RocketMQLocalTransactionState state; final JSONObject jsonObject = JSON.parseObject(new String((byte[]) message.getPayload())); AccountChangeEvent accountChangeEvent = JSONObject.parseObject(jsonObject.getString("accountChange"),AccountChangeEvent.class); //事务id String txNo = accountChangeEvent.getTxNo(); int isexistTx = accountInfoDao.isExistTx(txNo); log.info("回查事务,事务号: {} 结果: {}", accountChangeEvent.getTxNo(),isexistTx); if(isexistTx>0){     state= RocketMQLocalTransactionState.COMMIT; }else{     state= RocketMQLocalTransactionState.UNKNOWN; } state= RocketMQLocalTransactionState.COMMIT; return state;    }}

接着客户端执行事务一完成且提交后,我们来到rocketMQ服务端监听的服务中处理对象json消息

@Component@RocketMQMessageListener(consumerGroup = "consumer_group_txmsg_bank2" ,topic = "topic_txmsg")public class receptionRocketMQ implements RocketMQListener<String> {    @Override    public void onMessage(String s) { // TODO 取出事务编号查询事务一状态,执行事务二    }}

执行完事务二后我们的一套正常的事务流程就完成了

springCloudAlibaba的事务模块到这里就结束了,我们下期再见.期待和你们的交流博主微信lx2381499728