当前位置: 首页 > news >正文

做网站 违法/宁波seo推广联系方法

做网站 违法,宁波seo推广联系方法,南通网站关键词优化,岳阳建设网站引言 在日常开发中,消息队列已经成为业务场景中几乎不可或缺的一部分。无论是订单系统、日志收集、分布式事务,还是大数据实时流处理,消息队列都在支撑着这些关键环节。目前市面上常用的消息队列有三种(ActiveMQ 虽然在企业集成中仍有应用&a…

引言

在日常开发中,消息队列已经成为业务场景中几乎不可或缺的一部分。无论是订单系统、日志收集、分布式事务,还是大数据实时流处理,消息队列都在支撑着这些关键环节。目前市面上常用的消息队列有三种(ActiveMQ 虽然在企业集成中仍有应用,但由于性能和扩展性在高并发、大数据量场景下的局限性,相较于其他消息队列已显得较为陈旧),分别是 RabbitMQKafkaRocketMQ

今天,我们将深入了解这三种消息队列的实现原理区别应用场景,并探讨如何根据不同的业务需求进行合理选型。同样,这三种消息队列也是技术面试中经常被问到的知识点,掌握它们不仅有助于日常工作,更能帮助我们在面试中应对相关问题。

什么是消息队列?

消息队列是一个用于在分布式系统中传递消息的机制。它通过生产、存储和消费消息的方式,在不同系统或服务之间建立通信桥梁,帮助实现解耦和异步处理。消息队列的三大核心部分包括:

  1. 生产者(Producer)

    • 生产者是消息的创建者。它负责将消息发送到消息队列中。生产者可以是系统中的某个模块、服务,或者用户操作触发的事件。无论消息的来源是什么,生产者的作用就是生成需要传递的信息。
    • 在业务系统中,生产者通常是业务事件的触发方,例如用户下单时生成订单信息,并将该信息发送到消息队列中,以便其他系统能够接收和处理该信息。
  2. 存储处理中心

    • 存储处理中心(即消息队列本身)是消息暂存和处理的核心。消息在队列中存储,等待消费者读取和处理。这一中心还具有消息的路由、优先级排序等管理功能,可以根据系统需求决定消息的传递顺序和逻辑。
    • 消息队列的处理中心还具备高可靠性和持久化能力,确保消息不会丢失,即使系统出现故障,消息依然可以安全地被消费。此外,不同消息队列系统还提供不同的消息存储机制(如磁盘或内存存储)来适应不同的性能和可靠性要求。
  3. 消费者(Consumer)

    • 消费者是消息的接收者,它负责从队列中取出消息并进行业务处理。消费者可以是一个服务、一个模块,甚至是多个实例,以实现负载均衡。
    • 消费者通常在处理完消息后,会将消息从队列中移除,确保消息的正确处理。此外,消费者可能会根据业务需求进行异步处理,避免直接与生产者耦合。

为什么要使用消息队列?

在分布式架构中,直接调用可能会导致系统之间的耦合度过高,影响扩展性和稳定性。消息队列的引入能够帮助系统实现模块化,提高系统的灵活性和可靠性。主要有以下几大优势:

  1. 异步处理:在某些情况下,业务流程的实时性并不要求极高,消息队列可以将任务异步化处理,将耗时的操作交给消息队列,提升系统响应速度。例如,用户下单后发通知短信可以通过异步方式完成。
  2. 削峰填谷:在高并发场景中,短时间内的请求量可能远远超出系统处理能力,消息队列可以通过缓冲的方式平滑流量,将请求合理分配到较长的时间段中,从而避免系统崩溃。
  3. 系统解耦:消息队列可以隔离生产者和消费者,使得不同系统之间无需直接调用,实现系统间的松耦合。这样,生产者和消费者可以独立扩展、独立开发和部署,降低耦合度,提升灵活性。
  4. 流量控制:消息队列可以根据消费者的处理能力来分发消息,从而对系统流量进行有效控制,避免某个服务因负载过高而宕机。

消息队列的模式

  1. 点对点(P2P)模式:每条消息只能被一个消费者消费,这种模式下消息是单播的,适用于任务分发等场景。
  2. 发布/订阅(Pub/Sub)模式:消息可以被多个消费者消费,消息发布到一个主题中,订阅该主题的消费者都能接收消息,适用于广播通知、实时消息推送等场景。

工作常用的消息队列

在日常开发中,常用的消息队列主要包括以下三种:

  1. RabbitMQ
  2. Kafka
  3. RocketMQ

接下来,我们逐一了解每种消息队列的概念、架构和工作原理。

本篇文章只讲解一下每类消息队列的工作原理以及区别和选型。不做实际演示 方便我们在自己业务场景中做合适选型和面试了解哈。


RabbitMQ

概念

RabbitMQ 是基于 AMQP(Advanced Message Queuing Protocol)协议的消息代理中间件,能够在不同系统、应用和服务之间实现消息传递、异步处理、负载均衡等功能。它以其稳定性和灵活性著称,广泛应用于订单系统、分布式事务管理和异步消息处理等对消息可靠性要求高的场景。

架构

RabbitMQ 的架构主要包括以下核心组件:

  • Producer(生产者) :负责生成并发送消息到 RabbitMQ。
  • Exchange(交换机) :接收生产者的消息,并根据路由规则将消息分发到对应的队列。
  • Queue(队列) :用于存储消息的容器,消息在队列中等待被消费。
  • Consumer(消费者) :从队列中获取消息进行消费。
  • Binding(绑定) :将交换机和队列关联起来,以便消息能够根据路由规则从交换机到达特定的队列。

交换机是 RabbitMQ 路由消息的核心,它支持多种路由策略,灵活地满足不同的消息传递需求。常见的交换机类型有 Direct、Fanout、Topic 和 Headers,每种交换机类型都适用于特定的场景。

工作原理

RabbitMQ 的消息传递机制可以分为以下几个步骤:

  1. 消息生产:生产者向 RabbitMQ 中的交换机发送消息。消息会带有路由键(routing key),用于指引消息的传递方向。

  2. 消息路由:交换机根据路由键和自身的类型,将消息路由到特定的队列中:

    • Direct 交换机:根据完全匹配的路由键,将消息发送到相应的队列。
    • Fanout 交换机:将消息广播到所有绑定的队列中,忽略路由键。
    • Topic 交换机:基于模糊匹配的路由键分发消息,适用于复杂的路由需求。
    • Headers 交换机:通过消息头中的属性来匹配路由,不使用路由键。
  3. 消息存储:消息在队列中存储,等待消费者消费。RabbitMQ 支持消息持久化,确保在系统故障时不丢失数据。

  4. 消息消费:消费者从队列中取出消息进行处理。在消息被消费后,如果消费者返回确认,RabbitMQ 会将该消息标记为已消费并从队列中删除;否则消息会重新入队,确保消息不会丢失。

  5. 消息确认与重试:RabbitMQ 支持消息确认机制(ACK),消费者可以在成功处理后确认消息。如果消息处理失败,可以配置 RabbitMQ 将消息重新投递(如 Dead Letter Queue)。这一特性确保了消息传递的可靠性。

  6. 延迟消费:RabbitMQ 支持延迟消息处理(延迟消费),可以通过插件或死信队列(Dead Letter Queue, DLQ)实现。借助延迟队列或 TTL(Time to Live,存活时间)功能,可以设置消息的延迟时间,使得消息在指定的时间后才被消费。这一特性在订单超时、任务延迟处理等场景中非常实用。

    • TTL(消息过期时间):可以为消息设置存活时间,到期后消息将自动转入死信队列。
    • 延迟插件:可以实现更精确的延迟消费时间控制,使得消息在精确的时间点被消费。

RabbitMQ 以其灵活的路由策略、可靠的消息传递、延迟消费和丰富的插件支持,被广泛用于需要高度解耦、异步处理的场景。它的延迟消费特性进一步增强了 RabbitMQ 在任务调度、订单处理等领域的适用性,使其成为高可靠性场景中的重要选型。


RocketMQ

概念

RocketMQ 是阿里巴巴开源的分布式消息中间件,专为高吞吐量、低延迟和高可靠性设计。它具有灵活的消息传输模型和强大的消息路由功能,特别适用于金融级别的高可靠、高性能需求场景,例如支付系统、订单系统等。RocketMQ 支持海量消息的处理,是一种非常高效的消息队列系统。

架构

RocketMQ 的架构设计包括以下核心组件:

  • Producer(生产者) :负责将消息发送到 RocketMQ 的 Broker。RocketMQ 支持同步、异步和单向三种消息发送模式,以满足不同业务场景的需求。
  • Broker(代理服务器) :消息存储的核心,负责接收消息、存储消息,并将消息推送给消费者。Broker 还具有分区功能,可以通过分片实现高并发处理。
  • Consumer(消费者) :负责从 Broker 中拉取消息进行消费。RocketMQ 支持推模式和拉模式的消费方式,可以根据需要选择合适的消费模式。
  • Name Server(名称服务器) :名称服务器负责管理 Broker 和 Topic(主题)的元数据信息,用于消息的路由。生产者和消费者通过 Name Server 找到对应的 Broker 和 Topic,实现消息的精确投递。

RocketMQ 的架构以 Broker 为核心,通过 Name Server 提供路由元数据支持,将生产者和消费者连接到正确的 Broker 和分区,实现高效的数据传输和消费。

工作原理

RocketMQ 的消息处理过程可以分为以下几个步骤:

  1. 消息生产:生产者将消息发送到 Broker,消息在发送时会指定 Topic,并可以选择指定的 Tag 进行分类。RocketMQ 支持多种消息发送模式,包括:

    • 同步发送:生产者在发送消息后会等待 Broker 的确认响应,确保消息成功存储。
    • 异步发送:生产者发送消息后不等待响应,而是通过回调函数处理响应,适合对响应时间要求不高的场景。
    • 单向发送:生产者仅发送消息,不等待任何响应,适用于日志或监控等不关心确认的场景。
  2. 消息存储:Broker 将接收的消息写入磁盘,并可以选择将消息持久化,保证消息的可靠性。RocketMQ 支持高效的存储机制,通过 CommitLog 和 Consumer Queue 实现顺序存储和高效读取。

  3. 消息路由:生产者和消费者通过 Name Server 发现 Broker 和 Topic 的分布信息,从而根据消息的 Topic 找到对应的 Broker 并获取消息。Name Server 维护着 Broker 的路由表,支持动态注册和注销,确保消息路由的灵活性和实时性。

  4. 消息消费:消费者根据消费策略从 Broker 拉取消息。RocketMQ 支持多种消费模式:

    • 集群消费模式:多个消费者组成一个消费组,组内每个消费者处理不同分区的数据,保证消息只被消费一次,实现负载均衡。
    • 广播消费模式:消息会被同一个消费组中的所有消费者接收,适用于多实例同时处理同一份数据的场景。
  5. 顺序消息和延迟消息:RocketMQ 支持顺序消息,即消息按照严格的顺序写入和消费,适用于对顺序性有严格要求的场景。此外,RocketMQ 原生支持延迟消息,通过延时级别控制消息的延迟消费,例如订单支付的延迟处理、超时通知等。

  6. 事务消息:RocketMQ 支持分布式事务,通过“半消息”的机制来实现。事务消息发送后,RocketMQ 会先保存消息的预发送状态,等待事务完成确认。这一机制适用于金融系统中的分布式事务,如订单支付和库存扣减等操作。

RocketMQ 以其高吞吐量、低延迟、分布式事务和顺序消费等特性,在金融和互联网行业中得到广泛应用。它在处理海量数据、确保消息顺序性和事务一致性方面表现出色,是高并发、强一致性业务场景下的优选消息队列。


Kafka

概念

Kafka 是一个由 LinkedIn 开发、后被 Apache 基金会接管的分布式流处理平台。它最初设计为高吞吐量的分布式消息队列,但逐渐发展成实时数据流处理平台。Kafka 以高吞吐量和持久化设计著称,主要用于日志收集、实时分析和大数据处理等场景,广泛应用于金融、互联网、和电商行业。

架构

Kafka 的架构主要包括以下核心组件:

  • Producer(生产者) :负责向 Kafka 集群中的 Topic(主题)发送消息。
  • Broker(代理服务器) :Kafka 集群的节点,负责接收、存储、转发消息。Kafka 的每个 Broker 可以处理大量数据和客户端连接。
  • Consumer(消费者) :从 Kafka 中读取消息并处理,消费者可以根据业务需求从指定的 Topic 中拉取消息。
  • Zookeeper:用于存储 Kafka 的元数据(如 Broker 信息和消费者的偏移量),支持分布式协调和故障恢复。
  • Topic(主题) :Kafka 中的逻辑分类单元,生产者将消息发送至指定的 Topic,消费者从指定的 Topic 中读取消息。每个 Topic 可以划分为多个分区(Partition),以实现负载均衡和并发处理。

Kafka 采用分布式、分区化的架构,使其具备高吞吐量、高可用性的特性,能够处理海量实时数据流。

工作原理

Kafka 的消息处理流程可以分为以下几个步骤:

  1. 消息生产:Producer 将消息发送到 Kafka 中的特定 Topic,生产者可以选择发送到 Topic 的特定分区(Partition)。生产者可以根据消息的键值(key)来确定消息的分区,以保证同一键值的消息顺序性。例如,基于用户 ID 的消息会发送到同一分区,以确保消息按顺序处理。

  2. 消息存储与分区:Kafka 中的每个 Topic 可以分为多个分区,每个分区在 Broker 中以日志文件的形式顺序存储。分区的设计确保了 Kafka 可以通过多个 Broker 承载大规模的数据流量,支持水平扩展和高吞吐量。

    • 每个分区在 Broker 上保存了消息的偏移量(Offset),用于标记消息在分区中的位置。偏移量是唯一的序号,保证消息的有序性。
    • Kafka 的分区设计使得消费者可以并行处理同一个 Topic 中的不同分区,从而提升系统的并发处理能力。
  3. 消息消费:Consumer 根据偏移量(Offset)从 Topic 的分区中读取消息。Kafka 提供了两种主要的消费方式:

    • 传统消费:消费者从指定的偏移量开始读取消息,可以通过手动提交偏移量来实现精准控制。
    • 消费者组(Consumer Group) :多个消费者组成一个消费组,每个分区只能被组内一个消费者消费,确保了消费的负载均衡和横向扩展性。不同的消费组之间互不干扰,便于在不同的应用中复用相同的数据流。
  4. 持久化和可靠性:Kafka 支持消息持久化,将消息存储到磁盘中,即使系统崩溃或重启,数据也不会丢失。Kafka 的副本机制还允许每个分区在多个 Broker 上创建副本,通过主从复制和故障转移保证高可用性。

    • 主从复制:Kafka 中的每个分区都有一个主副本和多个从副本。主副本负责读写,从副本负责数据备份,当主副本不可用时,从副本可以立即接管,确保服务不间断。
    • 数据一致性:Kafka 提供 “At Least Once” 和 “Exactly Once” 的消费语义,满足不同业务对消息一致性的要求。
  5. 顺序消息与延迟消息:Kafka 保证分区内消息的顺序性,生产者发送到同一分区的消息会按顺序被消费,但不支持跨分区的全局顺序。Kafka 本身不支持直接的延迟消费功能,但可以通过流处理方式或借助 Kafka Streams 等工具实现定时处理。

  6. 实时流处理:Kafka 逐渐演变为实时流数据处理平台,结合 Kafka Streams 或 Apache Flink 等流处理框架,可以在消息流中进行实时的数据分析、过滤、聚合等操作,适用于监控、实时推荐等场景。

Kafka 以其高吞吐量、分布式架构、可靠的消息持久化和灵活的消费模型,成为日志处理和流数据处理领域的首选消息队列。Kafka 的分区和副本机制使它在大规模数据处理和高并发场景中表现出色,适用于需要实时数据流的复杂业务系统。


三个消息队列的区别

1. 架构设计与消息模型
  • RabbitMQ

    • 基于 AMQP 协议,具有复杂的路由功能,支持多种交换机类型(如 Direct、Fanout、Topic)。
    • 主要用于实现可靠的消息传递和复杂的消息流控制,适合需要高灵活性的业务场景。
  • Kafka

    • 基于分布式日志系统设计,强调高吞吐量和持久化,采用分区和副本机制实现数据冗余和负载均衡。
    • 主要用于日志收集和实时流数据处理,擅长处理大数据和流式数据。
  • RocketMQ

    • 具有高性能和灵活的分布式架构,支持多种消息模型,包括同步、异步、顺序、事务消息。
    • 专为金融级别的高可靠和高并发场景设计,适合金融支付、订单处理等场景。
2. 消息持久化与可靠性
  • RabbitMQ

    • 支持消息持久化和确认机制,确保消息在系统崩溃后不丢失。通过 ACK 确认消息处理,消息可在消费失败时重新投递。
    • 对于高可靠性要求,RabbitMQ 可以通过镜像队列实现多节点冗余。
  • Kafka

    • 消息持久化能力强,消息存储在磁盘上,具备持久化和高可用性。通过分区的主从复制机制,提供数据备份和故障恢复。
    • 提供 “At Least Once” 和 “Exactly Once” 的消费语义,保证数据一致性。
  • RocketMQ

    • 支持消息的持久化,采用 CommitLog 和 Consumer Queue 实现高效存储和消息消费。
    • 支持事务消息,能够实现分布式事务中的半消息机制,适合复杂业务流程中的一致性要求。
3. 是否支持顺序消费
  • RabbitMQ

    • 支持顺序消费,但需要通过特定的配置和单一消费者实现。在负载均衡模式下,顺序性可能无法保证。
  • Kafka

    • 支持分区内消息的顺序消费。生产者发送到同一分区的消息按照顺序被消费,但无法保证跨分区的全局顺序。
  • RocketMQ

    • 原生支持顺序消费,通过分区和标签(Tag)机制实现严格的顺序性,是对顺序性有严格需求的业务的理想选择。
4. 是否支持事务消息
  • RabbitMQ

    • 支持消息确认(ACK)机制,但不支持复杂的分布式事务。
  • Kafka

    • 支持 “Exactly Once” 语义和事务性写入,允许实现跨分区、跨主题的事务,是数据一致性要求高的场景中的一大优势。
  • RocketMQ

    • 原生支持事务消息,通过“半消息”机制实现分布式事务。消息发送后可以等待事务确认,适合金融支付和订单操作等场景。
5. 是否支持延迟消息
  • RabbitMQ

    • 支持延迟消息,但需要借助插件(如 rabbitmq_delayed_message_exchange)或通过死信队列(DLQ)与 TTL 配合实现。
  • Kafka

    • 不直接支持延迟消息功能,但可以通过 Kafka Streams 或其他调度系统来实现延迟消息处理。
  • RocketMQ

    • 原生支持延迟消息,可以根据延迟级别控制消息的消费时间,配置简单,适合任务调度、延迟通知等场景。
6. 吞吐量与延迟
  • RabbitMQ

    • 适合中小规模的消息传递。吞吐量相对 Kafka 和 RocketMQ 较低,但具有较低的消息延迟,适合对实时性要求高的业务。
  • Kafka

    • 吞吐量最高,能够在高并发场景中处理数百万级别的消息,是大数据实时处理的首选。延迟相对较低,适合日志处理和流式计算。
  • RocketMQ

    • 吞吐量较高,性能介于 RabbitMQ 和 Kafka 之间。延迟控制好,支持高并发、低延迟的业务场景。
7. 生态与社区支持
  • RabbitMQ

    • 生态成熟,插件支持丰富,广泛应用于企业应用系统中。易于集成,适合需要快速实现消息中间件的项目。
  • Kafka

    • 拥有庞大的社区支持和丰富的生态系统,如 Kafka Streams 和 Kafka Connect,便于与大数据平台集成,是实时数据处理和大数据分析的首选。
  • RocketMQ

    • 社区支持和发展较好,尤其在国内互联网和金融行业得到广泛应用。支持复杂的消息场景,如分布式事务和延迟消息。

消息队列特性对比

特性RabbitMQKafkaRocketMQ
顺序消费支持部分支持分区内支持支持
事务消息支持不支持支持支持
延迟消息支持支持(插件)不支持原生支持
消息持久化较好
吞吐量中等最高
延迟较低较低中等
生态与社区支持成熟庞大逐渐增强

消息队列选型分析

Kafka

Kafka 是为高吞吐量场景设计的消息队列,最初用于日志收集和传输,并逐渐演变为实时流处理的核心组件。其分布式架构和分区机制使其在高并发下表现出色,非常适合需要处理海量数据的互联网服务,如日志收集、事件跟踪和大数据管道。对于那些生成大量数据、需要快速处理和持久化的大型互联网公司,Kafka 是首选方案,尤其在日志采集、实时分析等场景中展现了强大的处理能力。Kafka 的丰富生态系统,如 Kafka Streams 和 Kafka Connect,使其在数据管道构建和流式数据处理方面无可替代。

适用场景:大数据流处理、日志收集与分析、事件溯源、实时数据传输。

RocketMQ

RocketMQ 是为高可靠性和高并发设计的分布式消息系统,特别适用于金融和电商领域。在这些场景中,消息的可靠传输和严格的顺序保证至关重要,例如订单支付、库存更新等关键业务操作。RocketMQ 原生支持分布式事务、延迟消息和顺序消费,是在复杂业务场景中确保消息一致性和稳定性的理想选择。阿里巴巴在其年度“双 11”大促中,RocketMQ 经受住了超高并发的考验,证明了其在大规模并发和高可靠性需求下的稳定性和可扩展性。

适用场景:电商订单处理、支付系统、削峰填谷、需要分布式事务的应用。

RabbitMQ

RabbitMQ 基于 Erlang 构建,得益于 Erlang 本身的并发优势,在中小规模场景中表现良好。它支持复杂的路由机制、多协议适配,以及丰富的插件生态,具有较高的灵活性和可定制性。对于开发维护而言,RabbitMQ 可能不如其他消息队列在二次开发和深度调优上方便,但其活跃的社区和支持文档能够有效帮助解决开发中的问题。对于数据量适中、不需要超高并发的场景,小型企业可以优先选择 RabbitMQ,以获得快速实现和灵活的消息传递功能。

适用场景:订单系统、任务队列、通知和邮件发送、中小型业务系统的异步处理。


如何选择适合的消息队列?

  1. 高吞吐量和大数据需求:对于需要处理巨量数据并追求高吞吐量的场景,如日志采集和实时数据处理,Kafka 是理想的选择。
  2. 高可靠性和分布式事务:在涉及支付、库存更新等需要强一致性和可靠性的场景中,RocketMQ 更值得信赖,尤其在高并发业务如电商促销活动中。
  3. 中小规模和功能灵活性:如果业务数据量不大且需要快速集成,RabbitMQ 是不错的选择,适用于中小型企业的任务调度和异步处理需求。

通过综合考虑业务需求的特点,如数据量、实时性、并发性、扩展性和开发维护成本,可以帮助团队做出更好的消息队列选型。

相关文章:

如何选择最适合的消息队列?详解 Kafka、RocketMQ、RabbitMQ 的使用场景

引言 在日常开发中,消息队列已经成为业务场景中几乎不可或缺的一部分。无论是订单系统、日志收集、分布式事务,还是大数据实时流处理,消息队列都在支撑着这些关键环节。目前市面上常用的消息队列有三种(ActiveMQ 虽然在企业集成中仍有应用&a…...

gitlab项目如何修改主分支main为master,以及可能遇到的问题

如果你希望将 Git 仓库的主分支名称从 main 修改为 master: 1. 本地修改分支名称 首先,切换到 main 分支: git checkout main将 main 分支重命名为 master: git branch -m main master2. 更新远程仓库 将本地更改推送到远程仓库…...

RRF(Reciprocal Rank Fusion,倒数排序融合)

RRF(Reciprocal Rank Fusion,倒数排序融合) 摘要 倒数排序融合 RRF 是一种简单的方法,用于结合多个 IR(Information Retrieval) 系统的文档排名,始终比任何单独的系统产生更好的结果。 通过使用 RRF 来结合几个TREC实验的结果,并建立一个 …...

移动开发(七):.NET MAUI使用RESTAPI实现查询天气笔记

目录 一、接口准备 二、实体部分 三、页面部分 四、后台代码逻辑 五、总结 在移动开发过程中,第三方对接是非常常见的。今天给大家分享.NET MAUI如何使用REST API实现输入城市名称查询天气的示例,希望对大家学习.NET MAUI可以提供一些帮助! 一、接口准备 首先我们需要…...

企业数据无缝对接:从旺店通到金蝶云的入库单管理案例

【类型:盘盈入库】旺店通-入库单管理>金蝶-其他入库单 在企业的日常运营中,数据的高效集成和准确传递是确保业务顺畅运行的关键。本文将分享一个实际案例,展示如何通过轻易云数据集成平台,将旺店通企业奇门的数据无缝对接到金蝶云星空&am…...

青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程

青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程 课题摘要:一、微服务微服务的主要特点包括:微服务架构的挑战:微服务的应用场景: 二、RESTfulRESTful的核心原则和特征包括:RESTful API的优势:REST…...

系统架构设计师论文:论区块链技术及应用

试题三 论区块链技术及应用 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域。从网络层面来讲,区块链是一个对等网络(Peer to Peer, P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节…...

放电电阻是什么

放电电阻,顾名思义,就是用于放电的电阻。在电路中,当电流突然增大时,如果没有适当的电阻来限制电流,就可能导致电路损坏。因此,放电电阻的作用就是在电路中起到限制电流的作用,防止电路因电流过…...

项目模块十七:HttpServer模块

一、项目模块设计思路 目的:实现HTTP服务器搭建 思想:设计请求路由表,记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表,服务器只接受请求并调用用户的处理函数即可。 处理流程: …...

Spire.PDF for .NET【页面设置】演示:获取 PDF 文件中的页数

计算 PDF 文件中的页数对于各种目的都至关重要,例如确定文档长度、组织内容和评估打印要求。除了使用 PDF 查看器了解页数信息外,您还可以通过编程自动执行该任务。在本文中,您将学习如何使用C#通过Spire.PDF for .NET获取 PDF 文件中的页数。…...

火语言RPA流程组件介绍--点击软件元素

🚩【组件功能】:点击软件UI窗口上的某个元素 配置预览 配置说明 操作目标 支持T或# 从 元素库 中选择一个已捕获的元素或通过 捕获新元素 来捕获新的窗口元素作为操作目标。获取元素方式见 桌面对象元素库使用方法。 模拟人工点击 模拟人工的方式触…...

c++程序设计速学笔记2基础数据结构

基础数据结构 数组(Array) 数组是一种线性数据结构,它存储相同类型的元素的连续内存块。数组的每个元素都有一个索引,用于快速访问和操作数据。 特点: 随机访问:数组支持通过索引快速访问元素。固定大小…...

搜维尔科技:SenseGlove案例-利用VR触觉技术培训机组人员

SenseGlove案例-利用VR触觉技术培训机组人员 搜维尔科技:SenseGlove案例-利用VR触觉技术培训机组人员...

OpenCV视觉分析之目标跟踪(10)估计两个点集之间的刚性变换函数estimateRigidTransform的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算两个2D点集之间的最优仿射变换 estimateRigidTransform 是 OpenCV 中的一个函数,用于估计两个点集之间的刚性变换(即…...

Python 虚拟环境创建

1. 创建python虚拟环境 conda create -n env_name pythonversionex:conda create -n train_ticket_venv python3.112. 查看安装包信息 pip show package_nameex: pip show numpy3. 用清华源安装软件包 pip install package_name -i https://mirrors.tuna.tsinghua.edu.cn/pyp…...

STL-list容器的使用

在C标准库中,std::list 是一个双向链表容器,提供高效的插入和删除操作,尤其适用于需要频繁在容器中间进行插入和删除元素的场景。与其他序列容器(如 std::vector 和 std::deque)相比,std::list 有其独特的优…...

java中线程与集合的面试题

在 Java 面试中,线程和集合相关的知识是非常常见的考察点。以下是几个典型的问题及答案: 线程相关面试题 什么是线程? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以有多…...

第十五章 IRIS 进程之间的通信

文章目录 第十五章 IRIS 进程之间的通信介绍指定作业间通信设备的内存缓冲区禁用作业间通信缓冲区 作业间通信设备编号设备编号 IJC 设备的 I/O 命令OPEN命令device 设备timeout 暂停 第十五章 IRIS 进程之间的通信 本页介绍如何在两个或多个 IRIS 数据平台进程之间建立通信。…...

设计者模式之策略模式

前言 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都写在对象中,将会使对象变得异常复杂;而且有时候支持不频繁使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算…...

STM32H750 COMP模拟比较器

STM32H750 COMP模拟比较器 🔖STM32H750内置两个超低功耗比较器通道(COMP1 和 COMP2). 📄功能应用: 在模拟信号的触发下从低功耗模式唤醒模拟信号调理与定时器的 PWM 输出结合使用时,构成逐周期电流控制环路…...

openresty入门教程:rewrite_by_lua_block

在OpenResty中,rewrite_by_lua_block 是一个强大的工具,它允许你在Nginx的rewrite阶段执行Lua脚本。这个阶段在Nginx处理请求的早期发生,通常用于修改请求URI、请求参数、请求头等,或者根据某些条件执行重定向、返回特定响应等。 …...

Java 并发编程学习笔记

参考资料: JAVA并发专题 - 终有救赎的专栏 - 掘金 Java并发编程学习路线(建议收藏��) | Java程序员进阶之路x沉默王二 面试题目: JUC第一讲:Java并发知识体系详解 面试题汇总(P6熟练 P7精通…...

【SpringMVC】——Cookie和Session机制

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:实践 1:获取URL中的参数 (1)PathVariable 2&…...

[产品管理-60]:产品的情感化设计与常用工具:感性工学、情感分析、神经网络法、微软反应卡、突发情绪法

目录 一、概述 1、情感化设计的三个层次 2、情感化设计在产品中的应用 3、情感化设计的案例 4、情感化设计的意义 二、常见工具 1、感性工学 (情商) 2、情感分析 3、神经网络法 4、微软反应卡 5、突发情绪法 一、概述 产品的情感化设计是一种…...

uniapp 小程序 周选择器

这里贴出来的是子组件的代码&#xff0c;父组件只是打开了一下popup // 打开了一下popup $refs.popup.open(bottom)如果不想用子组件的话&#xff0c;直接打开popup就可以用<template><uni-popup ref"popup" type"bottom" background-color&quo…...

Android笔记(三十二):封装一个毫秒级别倒计时View

效果 倒计时View视频 背景 业务场景需要显示带有毫秒级别的倒计时&#xff0c;于是自己封装一个通用的倒计时组件 源码分析 核心倒计时逻辑&#xff0c;主要是每隔100毫秒计算一次从开始倒计时到现在的剩余时间&#xff0c;并通过process接口返回出去Handler每次设置100毫秒…...

[产品管理-60]:马斯洛需求层次与产品的情感化设计

目录 一、概述 1、马斯洛需求层次理论概述 2、产品情感化设计与马斯洛需求层次的关系 3、产品情感化设计的实践案例 二、马斯洛需求层次与用户情感程度&#xff08;本能、行为、反思&#xff09;的关系 1、马斯洛需求层次与用户情感程度概述 2、马斯洛需求层次与用户情感…...

Python接口自动化测试自学指南(项目实战)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广…...

ESLint 使用教程(三):12个ESLint 配置项功能与使用方式详解

前言 在现代前端开发中&#xff0c;代码质量与一致性是至关重要的&#xff0c;ESLint 正是为此而生的一款强大工具&#xff0c;本文将带您详细了解 ESLint 的配置文件&#xff0c;并通过通俗易懂的方式讲解其主要配置项及其配置方法。此外&#xff0c;我们还将探讨一些高级配置…...

如何将 EDB 文件导入 Ansys HFSS 和 Ansys Q3D

EDB 文件包含有关印刷电路板 &#xff08;PCB&#xff09; 的基本数据&#xff0c;包括其布局、组件、连接性和电磁属性。将 EDB 文件导入 Ansys 工具是利用仿真和分析功能设计高效、可靠和高性能电子系统的关键步骤。在这里&#xff0c;我将向您展示如何将 EDB 文件导入 Ansys…...