李光明从程序员到架构师的逆袭之路(九)

初春的上海,对我而言,是一段既充满挑战又孕育希望的时光。作为20岁的计算机软件开发新手,我带着满腔的热情和对未知的好奇,踏上了这座城市的土地。然而,来上海的第十天,天空似乎并不那么友好,连绵的雨水仿佛没有尽头,这梅雨季的潮湿与不便,让出行成了一种考验,整个世界都显得格外湿漉漉,连心情也跟着变得沉闷起来。

1、【原创高质专栏】“论SOA在企业集成架构设计中的应用”必过模板,软考高级,系统架构设计师论文

2、【原创高质专栏】““论软件的可靠性评价”必过范文,软考高级,系统架构设计师论文

3、【原创高质专栏】“论软件系统建模方法”必过范文,软考高级,系统架构设计师论文

4、【原创高质专栏】“论软件架构风格”必过范文,软考高级,系统架构设计师论文

5、【原创高质专栏】“论云原生架构及其应用”必过范文,软考高级,系统架构设计师论文

6、【原创高质专栏】“论面向对象的建模及应用”必过范文,软考高级,系统架构设计师论文

7、【原创高质专栏】论边缘计算及应用”必过范文,软考高级,系统架构设计师论文

8、【原创高质专栏】“论多源数据集成及应用”必过范文,软考高级,系统架构设计师论文

9、【原创高质专栏】“论数据访问层设计技术及其应用”必过范文,软考高级,系统架构设计师论文

10、【原创高质专栏】“论湖仓一体架构及其应用”必过范文,软考高级,系统架构设计师论文

身边的朋友陆续传来了好消息,两个同伴已经顺利找到了工作,每当听到他们的分享,我的心中便不由自主地泛起一阵涟漪。那是一种复杂的情绪交织——既有对他们成就的羡慕,也有对自己现状的焦虑。我开始质疑自己,是不是哪里做得不够好,为什么至今还没有收到任何面试的邀请。那种孤独与挫败感,在寂静的夜晚尤为强烈,但我知道,我不能就此放弃。

为了打破这种僵局,我决定采取行动。在没有个人电脑的情况下,我选择了去网吧,尽管那里的环境还算不错,但高昂的费用让我每次都要精打细算,一个小时8块钱,对于当时的我来说,是一笔不小的开销。然而,这却是我能够接触到学习资源、提升自己技能的唯一途径。在网吧的角落里,我反复观看Spring框架的教学视频,试图从中汲取知识的养分。

编码,成了我每日不变的坚持。无论是基础的语言练习,还是深入Spring、AOP、SQL等技术的钻研,我都力求做到最好。我明白,只有技术过硬,才能在激烈的竞争中脱颖而出。于是,我利用一切可以利用的时间,不断锤炼自己的编程技艺。

在这段自我磨砺的日子里,我还尝试编写了一个关于RocketMQ分布式事务的demo。RocketMQ作为一款高性能的消息中间件,在处理跨服务、跨数据库操作时,其分布式事务的特性显得尤为重要。我研究的场景主要聚焦于订单系统,比如,当用户下单后,需要同时更新库存、生成物流信息,并确保这些操作要么全部成功,要么全部回滚,以保持数据的一致性。然而,实现这样的分布式事务并非易事,它面临着网络延迟、服务宕机、消息重复消费等一系列挑战,每一个细节都需要精心设计与测试。

这段经历,虽然充满了不易,但也让我深刻体会到了成长的滋味。正是这些挑战,促使我不断学习,不断进步。我坚信,只要坚持下去,总有一天,我会在这座城市中找到自己的位置,实现从程序员到架构师的蜕变。

以下是一个简化的RocketMQ分布式事务demo示例,该示例使用Java语言,并假设RocketMQ环境已经安装并配置完毕。在这个demo中,我们将模拟一个订单处理的场景,其中包括创建订单、更新库存和发送通知。

pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>你的RocketMQ版本</version>
</dependency>

接下来是分布式事务的实现:

import org.apache.rocketmq.client.producer.TransactionMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.concurrent.atomic.AtomicInteger;

public class RocketMQDistributedTransactionDemo {

    public static void main(String[] args) throws Exception {
        TransactionMQProducer producer = new TransactionMQProducer("transaction_producer_group");
        producer.setNamesrvAddr("你的RocketMQ NameServer地址");

        // 设置事务监听器
        producer.setTransactionListener(new TransactionListener() {
            private AtomicInteger transactionIndex = new AtomicInteger(0);

            @Override
            public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
                int value = transactionIndex.getAndIncrement();
                if (value % 3 == 0) {
                    // 模拟业务执行成功
                    return LocalTransactionState.COMMIT_MESSAGE;
                } else if (value % 3 == 1) {
                    // 模拟业务执行失败
                    return LocalTransactionState.ROLLBACK_MESSAGE;
                } else {
                    // 模拟业务执行悬而未决(例如,需要后续操作)
                    return LocalTransactionState.UNKNOW;
                }
            }

            @Override
            public LocalTransactionState checkLocalTransaction(MessageExt msg) {
                // 这里可以检查本地事务的状态,并返回相应的状态给Broker
                // 假设我们检查到事务已经成功执行
                return LocalTransactionState.COMMIT_MESSAGE;
            }
        });

        producer.start();

        for (int i = 0; i < 10; i++) {
            Message msg = new Message("TopicTest", "TagA", ("OrderID" + i).getBytes());
            SendResult sendResult = producer.sendMessageInTransaction(msg, null);
            System.out.println("SendResult: " + sendResult);
        }

        // 应用退出时,要关闭Producer,释放资源
        producer.shutdown();
    }
}

在这个demo中,创建了一个TransactionMQProducer,并设置了事务监听器。在executeLocalTransaction方法中,模拟了业务逻辑的执行,并返回了事务的状态。checkLocalTransaction方法用于在事务状态悬而未决时,Broker回调以检查事务状态。

最后,通过sendMessageInTransaction方法发送消息,并开启了事务。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员古德

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值