事务消息使用及方案选型思考

news2024/9/22 15:46:31

1. 事务消息概念与重要性

1.1 分布式系统中的事务问题

在分布式系统中,事务的一致性是一个核心问题。以电商登录送积分活动为例,用户登录成功后,系统需要执行两个关键操作:记录登录日志和发放积分。这两个操作需要保持一致性,即要么同时成功,要么同时失败。

在没有事务消息的情况下,如果使用传统的数据库事务来保证一致性,可能会因为网络延迟或服务故障导致操作失败。此外,将积分发放操作直接嵌入登录流程会增加登录的响应时间,影响用户体验。

1.2 事务消息的定义

事务消息是一种特殊类型的消息,它能够在分布式系统中保证消息发送与本地事务的最终一致性。事务消息的引入,解决了分布式系统中两个独立操作的一致性问题,即消息发送和数据库事务。

事务消息通常包含两个阶段:准备阶段和提交阶段。在准备阶段,消息被发送到消息队列,但不会被消费者消费。在提交阶段,根据本地事务的执行结果,消息会被提交(让消费者消费)或回滚(不让消费者消费)。

2. RocketMQ 事务消息实现原理

2.1 事务消息的发送与回查机制

RocketMQ 事务消息的实现原理类似于两阶段提交协议。当应用程序在事务中发送了一条事务消息后,这条消息会被标记为“准备”状态,并存储在 RocketMQ 的特殊主题中,等待事务的最终确认。

如果本地事务成功,应用程序会向 RocketMQ 发送提交指令,RocketMQ 随后将消息状态更改为可投递,消费者便可以消费这条消息。如果本地事务失败或超时,应用程序会向 RocketMQ 发送回滚指令,消息则不会被投递给消费者。

2.2 事务消息的状态回查

RocketMQ 通过定时任务周期性地检查处于“准备”状态的消息,并发起事务状态回查。应用程序需要实现相应的回调接口,以返回事务的当前状态。根据回查结果,RocketMQ 决定是提交还是回滚消息。

3. 事务消息实战应用

3.1 电商登录送积分场景

以电商登录送积分活动为例,我们可以通过以下步骤实现事务消息的应用:

  1. 用户登录请求到达系统,首先进行用户身份验证。

  2. 验证通过后,系统记录登录日志,并生成一个唯一的业务流水号。

  3. 系统发送一条事务消息到 RocketMQ,消息状态为“准备”。

  4. 系统在同一个数据库事务中更新用户积分,并记录事务日志。

  5. 根据本地事务的执行结果,系统向 RocketMQ 发送提交或回滚指令。

  6. 如果事务提交成功,RocketMQ 将消息投递给积分发放服务的消费者。

  7. 消费者接收到消息后,根据消息内容发放相应的积分。

3.2 事务消息的实现细节

在实现事务消息时,需要注意以下几个关键点:

  • 幂等性:消费者在处理消息时需要保证幂等性,以避免因消息重复消费导致的数据不一致问题。

  • 事务状态回查:应用程序需要正确实现事务状态回查逻辑,以确保消息状态的正确更新。

  • 异常处理:在发送事务消息的过程中,需要妥善处理网络异常、服务故障等异常情况。

3.3 事务消息的架构思考

事务消息虽然能够提供强一致性保证,但也引入了额外的复杂性和性能开销。在实际应用中,可以根据业务需求和技术栈进行权衡选择。例如,对于一些对实时性要求不高的场景,可以采用基于补偿机制的最终一致性方案,以减少对事务消息的依赖。

此外,事务消息的实现也需要考虑系统的可扩展性和容错性,确保在分布式环境下的高可用性。通过合理的设计和优化,事务消息可以成为解决分布式事务问题的有效工具。

2. RocketMQ 事务消息原理解析

2.1 事务消息实现机制

事务消息的实现机制是解决分布式系统中数据一致性问题的关键技术。在分布式系统中,一个业务操作往往涉及多个服务或组件的协作,例如,电商系统中用户登录并获取积分的场景。使用事务消息可以确保这些操作要么全部成功,要么全部失败,从而避免数据不一致的问题。

在RocketMQ中,事务消息的实现基于两阶段提交协议。具体来说,当应用程序需要发送一条事务消息时,它首先会向RocketMQ发送一条状态为“Prepare”的消息。这条消息会被RocketMQ暂存,并且不会被消费者消费。随后,应用程序会执行本地事务,并将事务的结果(提交或回滚)通知给RocketMQ。根据应用程序的反馈,RocketMQ会决定是将这条消息状态更改为“Commit”并投递给消费者,还是回滚这条消息。

关键特性

  • Prepare消息:事务消息的初始状态,不会被消费者消费。

  • 事务的原子性:确保消息发送与本地事务操作的原子性,要么同时成功,要么同时失败。

  • 事务状态回查:RocketMQ会周期性地回查事务状态,以决定消息的最终状态。

    图片

2.2 事务状态的回查流程

事务状态回查是RocketMQ事务消息机制中的一个核心环节。在这一流程中,RocketMQ服务器会主动向消息发送者询问之前发送的Prepare消息的事务状态。这一流程确保了即使在网络分区或其他异常情况下,也能够正确地处理消息。

回查流程

  1. 发送Prepare消息:应用程序在本地事务提交前发送一条Prepare消息到RocketMQ。

  2. 本地事务执行:应用程序执行业务逻辑,并记录事务状态。

  3. 状态回查:RocketMQ根据配置的时间间隔,向应用程序发起回查请求,询问事务状态。

  4. 状态反馈:应用程序根据本地事务的最终状态(提交、回滚或未知)反馈给RocketMQ。

  5. 消息处理:根据反馈的状态,RocketMQ决定是提交消息还是回滚消息。

    图片

考虑因素

  • 回查间隔:设置合适的回查间隔,以平衡实时性和系统资源消耗。

  • 回查次数:定义最大回查次数,避免无限回查导致的资源浪费。

  • 事务超时:设置事务超时时间,超过时间后默认回滚消息。

通过这种机制,RocketMQ事务消息确保了分布式系统中的业务操作和消息发送的一致性,为构建可靠的分布式应用提供了有力支持。

3. 电商登录送积分场景应用实例

3.1 场景背景介绍

在现代电子商务平台中,用户活跃度是衡量平台成功的关键指标之一。为了提升用户活跃度,电商平台常常推出各种激励措施,其中“登录送积分”活动便是常见的一种。该活动通过奖励用户的日常登录行为,增加用户对平台的粘性,进而促进用户在平台上的消费活动。

public Map<String, Object> login(String userName, String password) {
    Map<String, Object> result = new HashMap<>();
    if(StringUtils.isEmpty(userName) || StringUtils.isEmpty(password)) {
       result.put("code", 1);
       result.put("msg", "用户名与密码不能为空");
       return result;
     }
     try {
        User user = userMapper.findByUserName(userName);
        if(user == null || !password.equals(user.getPassword()) ) {
            result.put("code", 1);
            result.put("msg", "用户名或密码不正确");
            return result;
         }
         //登录成功,记录登录日志
         UserLoginLogger userLoginLogger = new UserLoginLogger(user.getId(),                               System.currentTimeMillis());
         userLoginLoggerMapper.insert(userLoginLogger);
         result.put("code", 0);
         result.put("data", user);
     } catch (Throwable e) {
         e.printStackTrace();
         result.put("code", 1);
         result.put("msg" , e.getMessage());
     }
     return result;
 }

然而,在实现这一活动的过程中,开发团队面临着技术挑战。传统的登录流程涉及用户验证和日志记录,而新增的积分发放逻辑若直接嵌入登录流程,将导致登录操作的延迟增加,影响用户体验。此外,若在用户登录成功后积分发放失败,将造成业务数据的不一致性。

3.2 事务消息解决方案

为了解决上述问题,引入了事务消息的解决方案。事务消息是一种特殊类型的消息,它能够保证消息的发送与数据库事务的一致性。以下是事务消息在电商登录送积分场景中的应用步骤:

  1. 用户登录请求:用户提交用户名和密码进行登录。

  2. 身份验证:系统验证用户信息,若验证成功,则进入下一步。

  3. 记录登录日志:系统记录用户登录的相关信息,包括登录时间和用户ID。

  4. 积分发放逻辑:系统检查当前日期是否在活动期间内,以及用户当日是否已登录过。若为用户当日首次登录,系统则准备发放积分。

  5. 发送事务消息:系统发送一条预准备(prepare)状态的事务消息至消息队列,消息内容包含用户信息和积分发放的操作。

  6. 本地事务提交:系统执行数据库事务,将登录日志和积分变更一同提交。

  7. 消息状态确认:系统根据数据库事务的执行结果,向消息队列服务端确认事务消息的状态,若成功则提交消息,若失败则回滚消息。

  8. 消息消费:消息队列服务端根据事务消息的状态,将消息投递给相应的消费者服务,完成积分的发放。

通过上述流程,即使在高并发的环境下,也能够确保用户登录和积分发放的原子性,从而保障了业务数据的一致性。此外,事务消息的使用降低了系统间耦合度,提高了系统的可维护性和可扩展性。

4. 事务消息实战案例分析

4.1 Spring Boot 集成 RocketMQ 事务消息

事务消息实战概述

在分布式系统中,保持数据的一致性是一个常见且复杂的问题。在电商系统中,用户登录并赠送积分的场景,就是一个典型的应用案例。通过使用RocketMQ的事务消息功能,可以有效地解决在用户登录成功后发送积分消息与数据库操作之间的一致性问题。

环境搭建与配置

在Spring Boot项目中集成RocketMQ事务消息,首先需要引入相关依赖,并进行相应的配置。配置包括RocketMQ的NameServer地址、Producer的组名以及事务监听器的实现等。

用户登录与事务消息发送

用户登录成功后,系统需要执行两个主要操作:记录登录日志和发送赠送积分的消息。在不使用事务消息的情况下,这两个操作的执行是串行的,且存在一致性风险。通过引入事务消息,可以将这两个操作包装在一个数据库事务中,确保它们要么同时成功,要么同时失败。

事务监听器的实现

事务监听器是实现事务消息的核心组件。它需要实现两个方法:executeLocalTransaction用于执行本地事务逻辑,checkLocalTransaction用于服务端回查事务状态。在executeLocalTransaction方法中,业务操作和发送半消息操作在一个事务中完成。根据方法执行结果,返回提交或回滚状态给Broker。

消息的确认与回查机制

当生产者发送半消息成功后,Broker会备份这条消息,并将其存储在特定的半消息主题中。随后,Broker会周期性地向生产者发起回查,询问事务的状态。如果生产者在指定时间内没有响应,或者连续多次回查都返回未知状态,Broker将默认回滚该消息。

事务消息的幂等性保证

在消费者端,由于一条消息可能被重复消费,因此需要保证操作的幂等性。这通常通过在数据库中设置唯一键或者使用业务逻辑来确保不会因为重复消费而导致数据不一致。

实战中的注意事项

在实际应用中,需要考虑事务消息的超时设置、事务状态的回查次数限制以及网络异常情况下的容错处理。此外,为了减少对业务性能的影响,建议将消息发送操作异步化。

测试与验证

通过编写测试用例,验证在不同的事务状态下,系统是否能够正确地提交或回滚消息。测试包括正常流程测试、超时测试和异常测试等,确保事务消息的可靠性。

项目实战代码示例

以下是一个简化的代码示例,展示如何在Spring Boot应用中使用RocketMQ事务消息:

@Service
public class UserServiceImpl {
    
    @Autowired
    private TransactionMQProducer producer;

    public void loginAndSendPoints(String userName, String password) {
        // 业务逻辑处理...
        // 假设业务流水号为businessId
        String businessId = "unique_business_id";

        try {
            // 执行本地事务逻辑
            boolean success = executeLocalTransaction(businessId);
            if (success) {
                // 本地事务成功,发送半消息
                producer.sendMessageInTransaction("prepare_message", businessId);
            } else {
                // 本地事务失败
                throw new RuntimeException("Local transaction failed.");
            }
        } catch (Exception e) {
            // 异常情况下回滚事务
            producer.rollbackMessage(businessId);
        }
    }

    private boolean executeLocalTransaction(String businessId) {
        // 执行数据库操作...
        // 假设操作成功
        return true;
    }
}

在上述代码中,loginAndSendPoints方法处理用户登录逻辑,并在登录成功后,尝试发送一条事务消息。executeLocalTransaction方法中包含了实际的业务逻辑,如果业务逻辑执行成功,则发送半消息;如果失败,则回滚消息。这样确保了用户登录操作与消息发送操作的原子性。
完整的代码样例下载地址:

https://pan.baidu.com/s/1ccSMN_dGMaUrFr-57UTn_A

提取码:srif

5. 事务消息架构思考与技术选型

5.1 事务消息与本地事务表结合

事务消息机制在分布式系统中扮演着至关重要的角色,特别是在需要确保多个服务间数据一致性的场景下。RocketMQ的事务消息通过与本地事务表的结合,实现了类似于两阶段提交的协议,确保了消息发送与本地数据库事务的原子性。

在实现过程中,应用程序首先在本地事务中完成业务数据的落库操作,随后发送一个预准备(prepare)状态的消息至RocketMQ。RocketMQ服务端将备份该消息的原始主题和队列信息,并将消息暂存于特定的系统主题下,而非立即投递给消费者。这一设计确保了消息与本地事务的绑定,使得它们能够作为一个统一的原子操作来处理。

数据库与消息队列的一致性

事务消息的核心优势在于其能够保证数据库操作与消息发送的一致性。在用户登录并可能获得积分的场景中,通过引入事务消息,我们可以将登录操作和消息发送操作封装在一个本地事务中。一旦本地事务提交成功,再由RocketMQ回调监听程序记录事务状态,并向服务端确认消息发送状态。若本地事务失败,消息则不会被确认,从而避免了因消息与数据库操作不一致而导致的业务错误。

图片

事务状态的回查机制

RocketMQ的事务消息还具备事务状态回查的能力。当本地事务状态未知或确认失败时,服务端会定期向生产者发起回查请求,询问本地事务的最终状态。这一机制允许系统在面对网络问题或应用故障时,依然能够保证数据的最终一致性。

图片

5.2 补偿机制与乐观锁的应用

除了事务消息机制外,补偿机制和乐观锁也是处理分布式事务问题的有效手段。

补偿机制

补偿机制基于业务逻辑的可逆性,当检测到业务流程中出现错误时,通过执行反向操作来恢复系统状态。例如,在电商积分发放的场景中,如果消息发送后,由于某种原因导致积分未能正确发放,补偿机制可以触发重新发放积分的操作,或者回退已发放的积分,以保证业务的一致性。

乐观锁

乐观锁适用于写冲突较少的场景,它假设在大多数情况下,多个事务可以并发执行而不会导致数据不一致。乐观锁通常通过在数据表中添加版本号或时间戳字段来实现。在执行更新操作时,检查版本号或时间戳是否发生变化,如果未变化,则执行更新并增加版本号;如果变化,则放弃当前事务并重试。

技术选型

在选择使用事务消息还是补偿机制或乐观锁时,需要根据具体的业务场景和需求来决定。如果业务对数据一致性的要求极高,且难以通过业务逻辑来实现补偿,那么事务消息可能是更合适的选择。然而,如果业务操作可以很容易地进行补偿,或者系统写冲突较少,补偿机制或乐观锁可能更为高效。

总结来说,事务消息提供了一种强大的机制来保证分布式系统中的一致性,但它也可能带来额外的复杂性和性能开销。在实际应用中,需要根据业务特点和性能要求,综合考虑使用哪种技术方案。

6. 事务消息的优缺点与适用场景

事务消息作为分布式系统中保证数据一致性的重要机制,具有其独特的优势和局限性,并适用于特定的业务场景。

6.1 事务消息的优点

事务消息的核心优势在于其能够确保本地事务与消息发送的原子性,即要么两者都成功,要么两者都失败,从而避免了数据不一致的问题。

  • 一致性保证:事务消息通过两阶段提交协议确保了消息发送与本地数据库事务的一致性,这对于需要高数据一致性保证的业务场景至关重要。

  • 简化开发:使用事务消息可以简化分布式事务的处理逻辑,开发者只需关注业务逻辑本身,而事务的一致性交由消息中间件来保证。

  • 提高性能:与传统的分布式事务相比,事务消息通过异步方式发送消息,可以减少对业务处理性能的影响,提高系统的吞吐量。

  • 可靠性增强:事务消息的回查机制能够确保在网络问题或应用故障时,消息的最终状态能够被正确处理,增强了系统的可靠性。

6.2 事务消息的缺点

尽管事务消息带来了许多好处,但它也存在一些缺点和局限性。

  • 性能开销:事务消息需要额外的确认和回查机制,这可能会增加系统的复杂性和性能开销。

  • 实现复杂性:事务消息的实现需要对业务逻辑进行改造,以适应两阶段提交的模型,这可能会增加开发和维护的难度。

  • 资源占用:事务消息在未最终确认前会占用一定的系统资源,如消息队列和存储空间,这可能对系统的资源管理提出更高要求。

  • 回查次数限制:事务消息通常有回查次数的限制,如果超过这个次数事务状态仍无法确定,系统可能会默认进行回滚处理,这可能不适用于所有业务场景。

6.3 适用场景分析

事务消息适用于需要保证分布式操作一致性的业务场景,尤其是在以下情况下:

  • 跨系统数据同步:在多个系统或服务之间进行数据同步时,使用事务消息可以保证数据的一致性。

  • 微服务架构:在微服务架构中,不同服务可能需要进行分布式事务处理,事务消息提供了一种有效的解决方案。

  • 高并发场景:在高并发的业务场景下,事务消息可以异步处理消息发送,减少对主业务流程的影响。

  • 补偿机制:对于需要事后补偿的业务流程,事务消息可以结合业务补偿逻辑,保证业务的最终一致性。

在选择是否使用事务消息时,需要根据业务的具体需求和特点进行权衡,以达到最优的系统设计和性能表现。

5. 总结与展望

事务消息作为RocketMQ的一项高级特性,为分布式系统中的数据一致性提供了有力保障。未来,随着技术的发展和业务需求的变化,事务消息机制可能会有进一步的优化和扩展。同时,开发者在应用事务消息时,应深入理解其原理和特性,以充分发挥其优势,构建高效、可靠的分布式系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高性能的 C++ Web 开发框架 CPPCMS + WebSocket 模拟实现聊天与文件传输案例。

1. 项目结构 2. config.json {"service": {"api": "http","port": 8080,"ip": "0.0.0.0"},"http": {"script": "","static": "/static"} }3. CMakeLists.txt…

html+css+js网页设计 电商模版4个页面

htmlcssjs网页设计 电商模版4个页面 带js 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&…

我把AI洗脑了!看了潘展乐、全红婵的采访,我才知道:远离人情世故,就是远离内耗——早读(逆天打工人爬取热门微信文章解读)

想无 引言Python 代码第一篇 洞见看了潘展乐、全红婵的采访&#xff0c;我才知道&#xff1a;远离人情世故&#xff0c;就是远离内耗第二篇 讲个鬼故事结尾 引言 昨天晚上把干货赶出来了 也就是昆虫小达人 大家可以看看 大概率能够让你心理上克服昆虫恐惧 今天没什么重点得事…

一、软件工程概述

软件工程概述 1. 软件的概念和特点2. 软件危机的产生3. 软件工程的概念和发展过程4. 软件工程知识体系与职业道德 1. 软件的概念和特点 软件定义 软件程序数据文档。 软件生存周期 问题定义&#xff1a;要解决的问题是什么&#xff1f;可行性分析&#xff1a;对于上阶段所确定…

智慧农业新篇章:实时监测与精细化管理

智慧农业&#xff0c;作为现代农业技术革命的先锋&#xff0c;正引领着一场深刻的产业变革。它通过融合物联网、大数据、人工智能等前沿科技&#xff0c;实现了对农业生产环境的实时监测与精细化管理&#xff0c;开启了农业发展的新篇章。这一转型不仅提升了农产品的质量与产量…

云仓酒庄湖南团队启航新征程:筑基新质生产力,深耕啤酒屋市场

原标题&#xff1a;云仓酒庄湖南团队启航新征程&#xff1a;筑基新质生产力&#xff0c;深耕啤酒屋市场 在当前经济转型升级的关键期&#xff0c;新质生产力的崛起正成为推动行业发展的重要引擎。云仓酒庄湖南团队积极响应市场变革&#xff0c;率先启动基础培训项目&#xff0…

基于paddlehub 未戴口罩检测算法

一、简介 以前大夏天戴着口罩别人觉得你不正常&#xff0c;现在上街不戴口罩你不正常。 本文要讲的未戴口罩算法是基于paddlehub提供的模型&#xff0c;paddlehub是百度飞浆(PaddlePaddle)下的深度学习模型开发工具。 PaddleHub旨在为开发者提供丰富的、高质量的、直接可用的…

beautifulsoup的简单使用

文章目录 beautifulsoup一. beautifulsoup的简单使用1、安装2、如何使用3、对象的种类 二、beautifulsoup的遍历文档树2.1 子节点.contents 和 .children descendants2.2 节点内容.string.text 2.3 多个内容.strings**.stripped_strings** 2.4 父节点.parent.parents 三、beaut…

AD如何在封装制作时添加禁止铺铜区域?

在PCB封装库中&#xff0c;选择“Top Layer”层执行菜单命令“放置→多边形铺铜挖空”&#xff0c; 然后画好所需要的挖空的区域即可&#xff0c;如果是设计完PCB之后才来进行铺铜挖空的&#xff0c;可以在添加完铺铜挖空之后选中器件右击点选“Update PCB With All”&#x…

PyFluent入门之旅(10)Fluent Python Console

之前的文章中都在介绍如何在Fluent外部环境使用PyFluent&#xff0c;那么是否有可能在Fluent内部使用PyFluent呢&#xff1f; 自Ansys 2023 R1开始&#xff0c;Ansys Fluent的内置控制台支持Python命令&#xff0c;这使在Fluent内部控制台使用PyFluent成为了可能。 准备工作 …

【SpringBoot】9 定时任务(Quartz)

介绍 实现方式 java定时任务调度的实现方式&#xff1a;Timer&#xff0c;ScheduledExecutor&#xff0c;Spring Scheduler&#xff0c;JCron Tab&#xff0c;Quartz 等。 Quartz Quartz是一个由Java开发的开源项目&#xff0c;它可以与J2EE、J2SE应用程序相结合也可以单独…

直播预约|8月14日,无人系统开发阶段故障注入与安全测试详解

电机失效故障硬件在环仿真 01 培训背景 卓翼飞思实验室暑期公益培训(第六期)将于8月14日&#xff0c;19:00开启&#xff01;通过【飞思实验室】视频号线上直播&#xff0c;由中南大学计算机学院特聘副教授&#xff0c;RflySim平台总研发负责人戴训华副教授主讲。 第六期培训将…

Navicat Premium15 下载与安装(免费版)以及链接SqlServer数据库

转自:https://blog.csdn.net/m0_75188141/article/details/139842565

Hi910X 系列恒压恒流 BUCK 控制器

1. 产品介绍 Hi910X 是一系列外围电路简洁的宽输入电压降压 BUCK 恒压恒流驱动器&#xff0c;适用于 8-150V 输入电压范围的 DCDC 降压应用。Hi9100、Hi9101、Hi9102、Hi9103智芯半导体降压恒压系列 Hi910X 采用我司专利算法&#xff0c;实现高精度的降压恒压恒流。支持输出…

CV每日论文--2024.7.24

1 、AutoAD-Zero: A Training-Free Framework for Zero-Shot Audio Description 中文标题&#xff1a;T2V-CompBench&#xff1a;组合文本到视频生成的综合基准AutoAD-Zero&#xff1a;零样本音频描述的免训练框架 简介&#xff1a;我们的目标是以无需训练的方式为电影和电视剧…

入门岛第2关Python基础知识

任务一 :Python实现wordcount 实现一个wordcount函数&#xff0c;统计英文字符串中每个单词出现的次数。返回一个字典&#xff0c;key为单词&#xff0c;value为对应单词出现的次数。 任务二:debug流程 安装好Python插件在 远程服务器中 在程序中打断点 debug 点击VSCode侧…

haproxy是什么?以及haproxy基础实验

目录 一、什么是负载均衡&#xff1f; 二、为什么要用haproxy&#xff1f; 三、haproxy的基本部署实验&#xff1a; 3.1 基本配置实验 环境准备&#xff1a; 详细步骤&#xff1a; 3.2 haproxy-多进程与多线程实验&#xff1a; 多进程&#xff1a; 多线程&#xff1a;…

【云服务器】 阿里云服务器免费试用3个月 不用学生认证

审核大大&#xff0c;这个真的不是广告呀...也是我琢磨了一下发现的一个方式&#xff0c;阿里云会找我打广告吗&#xff1f;&#xff1f; 这个羊毛不用学生认证&#xff01;&#xff01;只需登录和实名认证和即可 学生实名认证是送优惠券300&#xff0c;我没用上&#xff0c;…

Google 开发者大会(北京站) Play政策会议内容解读

2024年Google开发者大会的会议已结束&#xff0c;很庆幸自己参与了 Google Play 专场&#xff1a;全球视野&#xff0c;助力出海创新与增长 [13:00 - 15:10] 的工作坊内容&#xff0c;受益匪浅。 Google对未来Play市场的愿景&#xff0c;Play Console后台的全新功能&#xff0…

漏洞复现-XXL-JOB accessToken 存在身份认证绕过漏洞

1.漏洞描述 XXL-JOB是许雪里&#xff08;XXL-JOB&#xff09;社区的一款基于java语言的分布式任务调度平台。 2.影响版本 XXL-JOB < 2.2.0 3.影响范围 4.漏洞分析 首先通过微步的漏洞通报说是 src/main/resources/application.properties 默认情况下是非空的&#xff…