




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
17/23事件驱动的架构解耦技术第一部分事件模型与事件驱动架构 2第二部分事件驱动架构的解耦技术简介 4第三部分基于消息队列的事件解耦 6第四部分基于领域事件模型的事件解耦 9第五部分CQRS和事件溯源中的事件解耦 11第六部分基于微服务的事件解耦 13第七部分事件模式和事件驱动的设计原则 15第八部分事件驱动架构解耦技术的实践 17
第一部分事件模型与事件驱动架构关键词关键要点事件模型
1.事件模型定义为信息交换机制,其中系统通过异步方式相互通信。
2.事件是一个表示发生或将要发生的特定状态变化或动作的数据包。
3.事件模型基于发布/订阅模式,允许发送方(发布者)将事件广播到多个接收方(订阅者)。
事件驱动架构(EDA)
1.EDA是一种软件架构,其中组件通过事件进行通信,以响应系统内的状态变化。
2.EDA与传统的请求-响应模型不同,因为组件无需等待响应即可继续执行。
3.EDA提供了解耦、可扩展性和实时响应等优势。事件模型与事件驱动架构
事件模型
事件模型是一种表示状态变化的模式,它描述了一个系统中发生的特定事件以及它们之间的关系。事件模型通常包含以下元素:
*事件:系统中发生的、可观察的状态变化。
*事件属性:描述事件特征和详细信息的数据集合。
*事件类型:用于对事件进行分类和分组的类型系统。
*事件源:生成事件的系统组件或实体。
*事件处理程序:响应特定事件并采取相应动作的组件。
事件驱动架构
事件驱动架构(EDA)是一种软件架构模式,其中事件模型是系统操作的核心。EDA将系统分解为独立组件,这些组件通过事件进行通信。事件驱动的系统通常具有以下特点:
*松散耦合:组件之间通过事件进行通信,这避免了紧密耦合和直接依赖关系。
*可扩展性:EDA系统易于扩展,因为可以根据需要添加或删除组件,而无需修改现有组件。
*响应性:事件驱动的系统能够快速响应外部事件,因为组件可以异步处理事件。
*支持高并发:EDA系统能够处理大量并发事件,因为事件处理程序可以并行运行。
EDA中的事件类型
EDA系统中常见的事件类型包括:
*业务事件:表示业务领域中发生的实际事件,例如订单创建或产品交付。
*技术事件:表示系统内部发生的技术事件,例如服务器故障或网络中断。
*警报事件:表示系统中检测到的异常或错误情况。
EDA的优势
EDA为软件开发提供了许多优势,包括:
*改进的模块化:将系统分解为独立组件,提高了模块化和可维护性。
*增强的灵活性:通过事件通信的松散耦合允许系统组件轻松适应变化的需求。
*提高的性能:异步的事件处理可以提高系统的整体性能。
*简化集成:事件驱动的接口简化了不同系统和应用程序的集成。
EDA的挑战
虽然EDA具有许多优点,但它也带来了一些挑战,包括:
*顺序依赖性:事件处理的顺序依赖性可能导致系统复杂性和调试难度增加。
*事件风暴:大量事件的涌入可能会压垮系统。
*事件丢失:在某些情况下,事件可能会丢失,导致系统状态不一致。
为了克服这些挑战,需要仔细设计和实施EDA系统,考虑事件处理顺序、事件持久性机制和事件丢失处理策略。第二部分事件驱动架构的解耦技术简介关键词关键要点【事件驱动的解耦】
1.事件驱动机制:事件驱动的架构遵循异步通信模式,其中消息或事件作为松散耦合的通信机制,用于在不同组件之间传递信息。
2.发布-订阅模型:发布-订阅是一种事件驱动的通信模型,其中发布者将事件发送到消息代理,而订阅者从代理中接收感兴趣的事件。
3.负载均衡和容错性:事件驱动的架构通常利用消息代理和负载均衡器来分布事件处理,提高系统可用性和容错性。
【事件流处理】
事件驱动架构的解耦技术简介
事件驱动架构(EDA)是一种软件设计模式,其中组件松散耦合,通过事件进行通信。EDA为分布式系统提供了许多好处,包括可扩展性、容错性和敏捷性。
事件驱动的架构使用了以下关键解耦技术:
1.发布-订阅模式:
*发布者将事件发布到主题或频道。
*订阅者订阅主题或频道以接收事件。
*发布者和订阅者不知道彼此的身份。
2.事件总线:
*中介组件,负责路由事件。
*事件总线确保事件从发布者传递到订阅者。
3.事件存储:
*持久存储事件的存储库。
*允许在发布者和订阅者不可用时重放事件。
4.事件源:
*事件来源的抽象表示。
*提供事件的可读流,按发生顺序记录。
5.补偿机制:
*处理事件处理故障的机制。
*通过重试、补偿操作或回滚来恢复一致性。
发布-订阅模式
发布-订阅模式是一种消息传递模式,其中发布者将消息发布到主题或频道,而订阅者订阅该主题或频道以接收消息。发布者和订阅者不知道彼此的存在或状态。这种解耦使组件可以独立开发和部署,同时仍然可以进行通信。
事件总线
事件总线是中介组件,负责将事件从发布者路由到订阅者。它可以是简单的消息代理,也可以是更复杂的系统,提供诸如事件过滤、转换和持久性等功能。事件总线确保事件可靠且有序地传递。
事件存储
事件存储是事件的持久存储库。它允许在发布者和订阅者不可用时重放事件。这对于确保系统的一致性和容错性至关重要。事件存储还可用于进行数据分析和审计。
事件源
事件源是事件来源的抽象表示。它提供事件的可读流,按发生顺序记录。事件源对于理解系统状态的演变至关重要。它还可以用于重构事件流来调试问题或进行分析。
补偿机制
补偿机制是处理事件处理故障的技术。当事件处理失败时,补偿机制会触发操作以恢复系统的一致性。补偿操作可以包括重试、执行补偿操作或回滚到以前的系统状态。第三部分基于消息队列的事件解耦关键词关键要点【基于消息队列的事件解耦】:
1.消息队列作为事件生产者和消费者之间的媒介,提供异步和松散耦合的通信方式。
2.事件被封装成消息并发布到消息队列中,消费者可以独立于生产者订阅并处理这些消息,消除了同步等待和依赖关系。
3.可伸缩性通过水平扩展消息队列和消费者来轻松实现,以处理大量事件。
【事件溯源】:
基于消息队列的事件解耦
在事件驱动的架构中,消息队列扮演着至关重要的角色,实现事件解耦,提高系统的松散耦合性和可扩展性。
原理与实现
消息队列是一个存储和转发消息的中间件,在事件发生时,发布者将事件消息发布到队列中,订阅者从队列中消费并处理消息。这种机制使得发布者和订阅者可以异步通信,无需实时交互。
优势
1.解耦时序和依赖:发布者和订阅者不再依赖于彼此的执行时间,从而提高了系统的灵活性和弹性。
2.消息缓存和处理:消息队列作为消息的缓冲区,当发布者发送消息速度较快时,队列可以存储消息,防止订阅者出现过载。
3.可扩展性和可用性:可以轻松扩展消息队列以处理更高的消息负载,同时提高系统的可用性,即使某个组件出现故障,队列仍可以继续存储和转发消息。
4.可重放性:消息队列通常支持消息可重放功能,当订阅者出现问题时,可以重新发送消息,确保数据不会丢失。
消息队列类型
常见的基于消息队列的事件解耦方式包括:
1.面向消息的中间件(MOM):如ApacheKafka、RabbitMQ,提供可靠的持久化消息存储和处理功能。
2.流处理引擎:如ApacheFlink、ApacheSparkStreaming,针对大规模实时数据处理进行了优化,支持事件流的复杂处理和分析。
3.事件总线:如AmazonEventBridge、GoogleCloudPub/Sub,为云环境提供平台级的事件管理和传输服务。
应用示例
基于消息队列的事件解耦广泛应用于各种场景,例如:
*微服务架构:将微服务之间的数据交换解耦,提高服务的自主性和可重用性。
*数据管道:使用流处理引擎处理大规模数据流,实现数据摄取、转换和分析。
*实时监控:将日志、指标等事件数据发布到消息队列,以便进行实时监控和告警。
*物联网(IoT):管理物联网设备产生的事件数据,实现设备与应用之间的异步通信。
设计指南
设计基于消息队列的事件解耦系统时,需要考虑以下指南:
1.明确事件定义:定义事件的格式和语义,确保发布者和订阅者对事件有共同的理解。
2.选择合适的队列类型:根据消息负载、可用性和可扩展性要求选择合适的队列类型。
3.设计可靠的消息处理机制:确保消息不会丢失或重复处理,考虑重试、死信队列等机制。
4.监测和治理:通过监控队列状态、消息处理延迟等指标,确保系统的健康性和性能。
结论
基于消息队列的事件解耦是一种强大的技术,通过将事件发布和处理解耦,提高了系统的松散耦合性、可扩展性和弹性。在设计和实施基于消息队列的事件解耦系统时,需要仔细考虑事件定义、队列选择、消息处理机制和系统治理,以确保系统的可靠性和效率。第四部分基于领域事件模型的事件解耦基于领域事件模型的事件解耦
引言
在事件驱动的架构(EDA)中,事件解耦是将系统组件隔离并实现松散耦合的关键技术。基于领域事件模型的事件解耦是一种通过使用领域事件来解耦组件的有效方法。
领域事件模型
领域事件模型是一种架构模式,它通过定义领域中发生的重要事件来对业务流程进行建模。这些事件表示业务流程中的关键发生,例如订单创建、发票生成或用户登录。
事件解耦
在基于领域事件模型的解耦中,领域事件充当组件之间的消息传递机制。当产生一个事件时,它会被发布到事件总线或消息队列上。组件可以订阅特定的事件,并在事件发生时作出反应。
优势
这种解耦方式具有以下优势:
*松散耦合:组件不再直接调用彼此,而是通过事件进行通信。这使得它们可以在独立开发和部署,而无需担心相互依赖性。
*可扩展性:随着系统增长,添加或删除组件变得更加容易,因为它们只需订阅或退订相应的事件。
*容错性:如果一个组件因任何原因无法处理事件,事件总线会继续将事件传递给其他组件,从而提高了系统的容错性。
实现
实现基于领域事件模型的事件解耦需要以下步骤:
1.定义领域事件:识别业务流程中关键的事件,并为它们定义事件对象。
2.创建事件总线:建立一个事件总线或消息队列,用于发布和订阅事件。
3.发布事件:组件在产生事件时将其发布到事件总线上。
4.订阅事件:组件订阅感兴趣的事件,并在收到事件后作出反应。
示例
以下是一个基于领域事件模型的事件解耦示例:
*事件:`OrderCreatedEvent`
*组件:
*订单服务:生成`OrderCreatedEvent`
*库存服务:在收到`OrderCreatedEvent`后更新库存
*计费服务:在收到`OrderCreatedEvent`后生成发票
最佳实践
实施基于领域事件模型的事件解耦时,建议遵循以下最佳实践:
*使用异步通信:事件应通过异步通信机制发布和处理,以提高性能和容错性。
*定义明确的事件方案:定义用于表示事件的明确方案,包括事件的类型、数据结构和语义。
*使用事件溯源:考虑实施事件溯源以记录和重放事件,从而实现系统状态的完整性和可审计性。
结论
基于领域事件模型的事件解耦是一种强大的技术,可用于解耦组件并实现松散耦合的事件驱动的架构。通过遵循最佳实践,它可以提高可扩展性、容错性和系统的整体灵活性。第五部分CQRS和事件溯源中的事件解耦CQRS和事件溯源中的事件解耦
CQRS(命令查询职责分离)和事件溯源是事件驱动的架构中的两种解耦技术,用于分离命令处理和查询处理,并保持数据的完整性。
CQRS中的事件解耦
CQRS将应用程序分为两个独立的模型:命令模型和查询模型。命令模型负责处理改变应用程序状态的命令,而查询模型负责从应用程序状态中检索数据。这种分离允许命令和查询并行执行,提高了应用程序的并发性和吞吐量。
事件解耦在CQRS中用于解耦命令处理和查询处理。当命令被执行时,它会生成一个或多个事件。这些事件被存储在一个事件存储中,然后由查询模型使用来更新应用程序状态。这种解耦允许查询模型异步更新,而不会阻塞命令处理。
事件溯源中的事件解耦
事件溯源是一种设计模式,它将应用程序的状态作为不可变事件的序列来表示。每个事件都代表应用程序状态的一个变更,按时间顺序存储在事件存储中。
事件解耦在事件溯源中用于解耦应用程序状态的变更和查询处理。当应用程序的状态被更新时,它会生成一个事件。该事件被存储在事件存储中,然后由查询模型使用来重建应用程序的当前状态。这种解耦允许查询模型灵活地查询应用程序的历史状态,而不会影响应用程序的状态变更。
事件解耦的好处
事件解耦提供了以下好处:
*并发性:它允许命令和查询并行执行,提高了应用程序的并发性和吞吐量。
*可扩展性:它允许将应用程序扩展到多个服务器,因为命令和查询可以在不同的服务器上处理。
*容错性:它通过允许查询模型从事件存储中重建应用程序状态来提高应用程序的容错性。
*历史审计:它提供了应用程序状态变更的完整历史记录,便于进行历史审计和故障排除。
事件解耦的挑战
事件解耦也有一些挑战:
*复杂性:它增加了应用程序的复杂性,因为它需要管理事件存储和协调命令和查询处理。
*事件存储:需要一个可靠、高性能的事件存储来存储事件。
*查询性能:从事件存储中重建应用程序的状态可能是一个昂贵的操作,需要仔细优化以实现可接受的查询性能。
结论
CQRS和事件溯源中的事件解耦是强大的技术,可以显着提高事件驱动的架构的并发性、可扩展性和容错性。通过利用这些技术,企业可以构建高性能、可靠的应用程序,以满足不断变化的业务需求。第六部分基于微服务的事件解耦基于微服务的事件解耦
在事件驱动的架构中,微服务充当事件的发布者和订阅者。通过采用基于微服务的事件解耦,系统可以实现以下优势:
松耦合:微服务之间仅通过事件总线交互,无需直接依赖或了解彼此的实现细节。
扩展性和弹性:微服务可以根据需要独立地扩展或缩减,而不会影响其他微服务。
容错性:事件总线确保消息的可靠交付,即使单个微服务发生故障,也不会丢失事件。
实现方式
基于微服务的事件解耦通常使用以下组件实现:
事件总线:一个集中式组件,负责接收、路由和传递事件。它通常采用消息队列或流处理平台。
发布者:产生事件的微服务将事件发布到事件总线。事件包含相关数据和元数据。
订阅者:对特定类型事件感兴趣的微服务订阅事件总线。当满足订阅条件时,它们将收到事件。
处理程序:订阅者实现处理程序,用于处理收到的事件并执行相应的业务逻辑。
优势
基于微服务的事件解耦提供了以下优势:
异步通信:微服务之间的通信是异步的,允许它们独立于处理事件所需的时间进行操作。
可重试机制:事件总线通常提供可重试机制,以确保即使事件处理失败,事件也不会丢失。
分布式事务处理:事件总线可以简化分布式事务处理,通过确保事件的顺序性和一致性。
监控和审计:事件总线提供集中式视图,用于监控微服务之间的通信和事件处理,从而简化了审计和故障排除。
最佳实践
设计基于微服务的事件解耦系统时,应遵循以下最佳实践:
定义明确的事件契约:为每个事件类型定义明确的契约,包括事件结构、语义和处理规则。
使用幂等操作:确保事件处理操作是幂等的,以防止重复处理导致数据不一致。
限制事件大小:保持事件大小相对较小,以优化事件总线的性能和可伸缩性。
使用版本控制:对事件类型使用版本控制,以随着时间的推移安全地更新事件契约。
实施重试策略:为事件处理失败实施重试策略,以提高系统弹性和可用性。
监视事件总线:监视事件总线以检测性能问题、错误和延迟。第七部分事件模式和事件驱动的设计原则关键词关键要点主题名称:事件模式
1.发布/订阅模式:允许发布者向多个订阅者广播事件,实现解耦和可扩展性。
2.请求/响应模式:发布者向队列发送请求,订阅者接收并处理请求,提供同步通信。
3.持续查询模式:订阅者持续接收一系列事件,直到订阅被取消。
主题名称:事件驱动的设计原则
事件模式
事件模式是事件驱动的架构的基础,它定义了事件的结构和语义。常见的事件模式包括:
*事件通知:告知订阅者事件发生,通常只包含必要信息。
*命令:请求接收器执行特定操作。
*状态更改:表示系统状态的变化。
*集成事件:来自外部系统或流程的数据,需要应用程序处理。
*业务事件:表示业务流程中的重要事件,如订单创建或发货。
事件驱动的设计原则
事件驱动的设计原则为构建健壮、可扩展和松散耦合的事件驱动的系统提供了指导。这些原则包括:
*CommandQueryResponsibilitySegregation(CQRS):将命令和查询操作分离到不同的组件中,实现更好的可扩展性。
*基于事件的状态转换(ES):将系统状态存储在事件流中,而不是数据库中,从而增强可审计性和灾难恢复能力。
*发布/订阅模式:允许发布者向多个订阅者广播事件,实现松散耦合和可扩展性。
*事件溯源:通过存储事件序列来重建系统状态,实现透明度和调试能力。
*最终一致性:接受系统中的数据可能暂时不一致,但最终将达到一致状态,以提高可用性和可扩展性。
*防腐层:在不同的系统或流程之间实现交互隔离,确保松散耦合和可维护性。
*编排和协调:定义和执行跨多个服务的复杂流程,以确保业务目标的实现。
*重放性:确保事件可以按顺序重播,以支持调试、测试和灾难恢复。
*幂等性:确保事件可以安全地重复执行,而不会产生副作用。
*事件源:负责生成、持久化和发布事件的组件,确保事件数据的可靠性和完整性。第八部分事件驱动架构解耦技术的实践关键词关键要点【事件驱动架构解耦技术的实践】
【事件驱动架构解耦技术的实践】
1.事件驱动架构(EDA)通过事件来连接松散耦合的组件,这些组件订阅特定类型的事件并做出响应。
2.EDA允许组件异步通信,提高了系统的可扩展性和容错性。
3.EDA支持微服务架构,其中每个服务独立部署和扩展,并通过事件总线连接。
【事件驱动的微服务】
事件驱动架构解耦技术的实践
事件通知和发布/订阅模式
*事件通知:生产者组件生成事件并将其传递给中间件,然后中间件将事件转发给消费者组件。
*发布/订阅模式:发布者组件发布事件,而订阅者组件订阅特定类型的事件。中间件负责路由事件到订阅者。
事件总线
*集中式平台,用于路由和分发事件。
*它提供对事件的管理和监控能力,包括事件过滤、路由和重试。
消息队列
*队列存储已发布的事件,并确保在消费者组件可用时将其交付给消费者。
*它支持先进先出(FIFO)或先入先出(LIFO)交付。
事件驱动的微服务
*微服务设计成对事件做出反应并产生事件。
*它们使用轻量级消息传递机制,例如HTTP请求或MQTT。
CQRS(命令查询职责分离)
*架构模式,将应用程序的命令和查询操作分离到不同的组件中。
*事件有助于跟踪命令操作的执行,并用于生成查询模型。
事件溯源
*事件存储的不可变序列,反映应用程序状态随时间推移的变化。
*它用于重建应用程序状态,调试和分析。
实践原则
*定义明确的事件模型:建立一个共享的词汇表来定义事件,包括它们的名称、有效负载和语义。
*使用异步消息传递:使用非阻塞消息传递机制来防止事件处理延迟应用程序逻辑。
*设计弹性的事件处理程序:确保事件处理程序在遇到故障时能够恢复并重试。
*管理事件版本控制:随着时间的推移,版本化事件格式以支持向下兼容性。
*监控和警报:监控事件管道中的关键指标,例如延迟和处理错误,并设置警报以检测问题。
常见模式
*请求响应模式:发布者发送事件请求,订阅者返回事件响应。
*通知模式:发布者发送事件通知,但不需要响应。
*订阅模式:订阅者订阅特定类型的事件,仅接收与订阅相关的事件。
*事件聚合模式:多个事件被聚合到一个事件中,以减少网络流量和处理负载。
*事件路由模式:事件根据预定义规则路由到不同的处理程序。
好处
*解耦:事件驱动架构解耦了组件,使它们能够独立部署和扩展。
*弹性:异步消息传递和弹性事件处理程序确保在出现故障时应用程序仍然可用。
*可扩展性:事件驱动架构易于扩展,新的组件可以轻松地添加或删除,而不会影响现有系统。
*松散耦合:组件之间只通过事件相互通信,无需了解对方的内部结构。
*可审计性:事件存储提供了应用程序活动的可审计记录,有助于调试和分析。关键词关键要点基于领域事件模型的事件解耦
主题名称:领域事件模型
关键要点:
1.领域事件是一种表示业务领域内发生事件的对象。
2.领域事件模型由一组关联的领域事件组成,共同描述了业务流程的执行。
3.领域事件模型将业务逻辑与基础设施解耦,允许灵活地修改应用程序的行为而不影响底层系统。
主题名称:事件存储
关键要点:
1.事件存储是一种用于持久化领域事件的机制。
2.事件存储确保事件的可靠性、可追溯性和可重放性。
3.事件存储可以基于各种技术,如数据库、消息队列或文档存储。
主题名称:事件总线
关键要点:
1.事件总线是一种用于传递事件的机制。
2.事件总线提供了一种松散耦合的方式,允许订阅者组件接收和处理事件。
3.事件总线可以基于消息队列或其他异步通信机制。
主题名称:事件侦听器
关键要点:
1.事件侦听器是一种负责处理事件的组件。
2.事件侦听器可以在系统中实现业务逻辑或触发进一步的动作。
3.事件侦听器可以遵循事件源模式,其中事件源组件负责发布事件,而事件侦听器负责处理事件。
主题名称:事件投射
关键要点:
1.事件投射是一种将事件重新应用于目标系统以创建或更新数据的过程。
2.事件投射用于将领域事件模型中的更改同步到数据库或其他持久化机制中。
3.事件投射可以基于各种机制,如表外键、物化视图或定制代码。
主题名称:事件溯源
关键要点:
1.事件溯源是一种通过存储和重播历史事件来重建系统状态的技术。
2.事件溯源提供了一种不可变和可审计的系统状态记录。
3.事件溯源可用于调试、故障排除和业务分析。关键词关键要点主题名称:CQR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国机翼型中空铝合金叶轮数据监测报告
- 2025-2030年中国三级综合医院行业市场运行调研与投资风险研究报告
- 2025年中国新铃兰醛数据监测报告
- 2025年中国数字音频复接设备数据监测研究报告
- 2025年中国炉具铜分火器数据监测报告
- 肇庆市实验中学高中生物三:2生长素的生理作用第2课时导学案
- 肇庆市实验中学高中历史三:第课音乐与美术高效课堂教学设计
- 新疆科信职业技术学院《人体解刨学》2023-2024学年第一学期期末试卷
- 新疆沙雅县二中2025年高三三月模拟考试化学试题(文理)试卷含解析
- 新乡工程学院《写作思维学》2023-2024学年第二学期期末试卷
- 国家4A级旅游景区评定标准(详)
- 不良资产项目律师法律尽调报告(模板)
- 八下可爱的四川教案
- 压覆矿产资源评估服务方案
- 外国画家作品介绍赏析
- 三联图书馆管理系统2013压缩版常见问题与解答
- 48V100A-储能-BMS规格书(带RS232 RS485 CAN通讯)
- 小学英语课程与教学论(小学教育专业)PPT完整全套教学课件
- 中药养护记录表
- 实验室安全自查表样表
- 《机械设计基础》复习备考题库(含答案)
评论
0/150
提交评论