概述
为什么不更新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
最后
以上就是忧心星月为你收集整理的不好意思断更挺长时间可能springCloud不会再更新了,让我们来学习springCloudAlibaba的全部内容,希望文章能够帮你解决不好意思断更挺长时间可能springCloud不会再更新了,让我们来学习springCloudAlibaba所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复