RabbitMQ 教程 | 第11章 RabbitMQ 扩展

news2024/9/24 5:33:19

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

这篇 RabbitMQ 教程为学习者提供了全面的内容,从 RabbitMQ 的简介开始,涵盖了消息中间件的概念、RabbitMQ 的安装与使用,以及交换机、队列、路由键等相关概念的介绍。进一步深入,教程探讨了 AMQP 协议、客户端开发向导,以及消息的发送和消费方式。同时,学习者还可以了解消息传输保障、高级特性如死信队列、延迟队列、优先级队列、RPC 实现等。此外,教程还涵盖了 RabbitMQ 的管理、配置、运维、监控和集群管理等重要主题,帮助学习者充分掌握 RabbitMQ 的应用。整篇教程丰富内容详实,适合初学者和有经验的开发者参考学习。

全篇共 11 章,9 万余字。本文:第11章 RabbitMQ 扩展。

第11章 RabbitMQ 扩展

11.1 消息追踪

了解如何对 RabbitMQ 中的消息进行追踪和监控,以便进行可靠性检测和问题排查。

11.1.1 Firehose

Firehose 插件是 RabbitMQ 提供的一个插件,它允许将消息传递日志导出到外部系统进行分析和监控。通过 Firehose,您可以将消息传递过程中的各种事件、指标和数据导出到指定的外部系统,如 Elasticsearch、Logstash 等,以便进行实时监控、数据分析和性能优化。

使用 Firehose 插件的步骤:

  1. 安装 Firehose 插件: 首先需要在 RabbitMQ 服务器上安装 Firehose 插件。可以通过 RabbitMQ 的插件管理工具来安装插件,或者手动下载插件文件进行安装。
  2. 配置 Firehose 插件: 安装完插件后,需要对 Firehose 进行配置,以指定数据的输出目的地。通常需要配置导出数据的外部系统的连接信息,如 Elasticsearch 的地址、用户名、密码等。
  3. 启用 Firehose 插件: 配置完成后,需要在 RabbitMQ 中启用 Firehose 插件。通过启用插件,RabbitMQ 将会把消息传递日志数据导出到配置的外部系统。
  4. 监控和分析: 一旦 Firehose 插件启用成功,RabbitMQ 将开始将消息传递日志数据导出到指定的外部系统。在外部系统中,您可以使用各种监控和分析工具来实时监控消息的传递状态、性能指标等,并进行数据分析和优化。

Firehose 插件的优势:

  • 实时监控: Firehose 允许实时地将消息传递日志导出到外部系统,使您能够及时监控 RabbitMQ 集群的运行状态和性能。
  • 灵活性: 通过配置 Firehose 插件,您可以选择导出的日志内容和指标,以满足特定的监控和分析需求。
  • 集成性: Firehose 插件支持导出数据到多种外部系统,如 Elasticsearch、Logstash 等,使其与现有的监控和分析平台无缝集成。
  • 性能优化: 通过监控和分析导出的日志数据,您可以发现潜在的性能瓶颈和问题,并对 RabbitMQ 进行优化。

注意事项:

  • 在配置 Firehose 插件时,需要确保外部系统的连接信息正确,以保证数据能够正确地导出到指定的目的地。
  • 导出的日志数据可能会产生较大的数据量,因此需要确保外部系统的存储和性能能够满足需求。
  • 在使用 Firehose 插件时,需要谨慎处理敏感信息,以确保数据的安全性。

总的来说,Firehose 插件是 RabbitMQ 提供的一个强大的工具,通过它可以将消息传递日志导出到外部系统,帮助您实时监控和分析 RabbitMQ 集群的性能,从而优化消息传递过程和提高系统的稳定性和可靠性。

11.1.2 rabbitmq_tracing 插件

rabbitmq_tracing 插件是 RabbitMQ 提供的一个插件,它允许您在 RabbitMQ 中对消息进行追踪和监控。通过 rabbitmq_tracing 插件,您可以捕获消息在 RabbitMQ 中的生命周期事件,包括消息的发布、路由、投递等过程,以及在不同组件之间的传递情况。这些追踪数据可以帮助您了解消息传递的整个流程,诊断潜在的问题,并优化系统性能。

使用 rabbitmq_tracing 插件的步骤:

  1. 安装 rabbitmq_tracing 插件: 首先需要在 RabbitMQ 服务器上安装 rabbitmq_tracing 插件。可以通过 RabbitMQ 的插件管理工具来安装插件,或者手动下载插件文件进行安装。
  2. 配置 rabbitmq_tracing 插件: 安装完插件后,您可以通过 RabbitMQ 的管理界面或命令行来配置 rabbitmq_tracing 插件。可以设置追踪规则,即指定哪些消息或者组件需要进行追踪。
  3. 启用 rabbitmq_tracing 插件: 配置完成后,需要在 RabbitMQ 中启用 rabbitmq_tracing 插件。通过启用插件,RabbitMQ 将会开始对指定的消息和组件进行追踪。
  4. 监控和分析: 一旦 rabbitmq_tracing 插件启用成功,RabbitMQ 将开始捕获指定消息的追踪数据。您可以通过 RabbitMQ 的管理界面或命令行来查看这些追踪数据,或者将数据导出到外部系统进行进一步的监控和分析。

rabbitmq_tracing 插件的优势:

  • 全面追踪: rabbitmq_tracing 插件可以对消息传递的各个环节进行追踪,包括消息的发布、路由、投递等过程,帮助您全面了解消息在 RabbitMQ 中的行为。
  • 细粒度控制: 您可以通过配置追踪规则,指定哪些消息或者组件需要进行追踪,使得您可以根据需求对追踪的数据进行细粒度的控制。
  • 诊断问题: 通过查看追踪数据,您可以发现潜在的问题和瓶颈,帮助您更快地诊断和解决消息传递中的问题。
  • 性能优化: 追踪数据可以帮助您了解系统的性能状况,从而优化消息传递过程,提高系统的吞吐量和稳定性。

注意事项:

  • 在配置 rabbitmq_tracing 插件时,需要谨慎选择追踪规则,避免过多的追踪数据导致性能下降。
  • 追踪数据可能会产生较大的数据量,因此需要确保外部系统的存储和性能能够满足需求。
  • 在使用 rabbitmq_tracing 插件时,需要考虑数据的隐私和安全性,避免敏感信息被泄露。

总的来说,rabbitmq_tracing 插件是一个强大的工具,可以帮助您实现对消息的追踪和监控,从而更好地了解消息传递的整个过程,诊断问题,优化系统性能,提高 RabbitMQ 集群的稳定性和可靠性。

11.1.3 案例:可靠性检测

假设我们有一个使用 RabbitMQ 的分布式系统,其中包含多个服务,这些服务之间通过 RabbitMQ 进行消息通信。我们希望使用消息追踪特性来检测系统的可靠性,确保消息在系统中的传递是稳定和可靠的。

在这个案例中,我们将使用 rabbitmq_tracing 插件来追踪消息,并对消息传递过程中的一些关键事件进行监控和分析。具体步骤如下:

  1. 安装和配置 rabbitmq_tracing 插件: 首先,我们需要在 RabbitMQ 服务器上安装 rabbitmq_tracing 插件,并配置追踪规则。我们可以设置追踪规则,对特定的消息和组件进行追踪。
  2. 启用 rabbitmq_tracing 插件: 配置完成后,需要在 RabbitMQ 中启用 rabbitmq_tracing 插件,使其开始对指定的消息和组件进行追踪。
  3. 定义监控指标: 我们可以定义一些监控指标,用来衡量系统的可靠性。例如,可以监控消息的投递成功率、消息的投递时间、队列中消息的积压情况等。
  4. 收集追踪数据: 一旦 rabbitmq_tracing 插件启用成功,RabbitMQ 将开始捕获指定消息的追踪数据。我们可以定期收集这些数据,并将其存储到外部系统中,用于后续的分析和监控。
  5. 分析追踪数据: 收集到的追踪数据可以帮助我们了解消息传递的整个流程。我们可以通过分析追踪数据,发现潜在的问题和瓶颈,比如消息投递失败、消息堆积、消息丢失等。
  6. 发现并解决问题: 通过分析追踪数据,我们可以发现系统的可靠性问题,并采取相应的措施来解决这些问题。例如,可以增加消息的重试机制、增加队列的容量、优化消息的路由等。
  7. 持续监控: 可靠性检测是一个持续的过程,我们需要定期收集和分析追踪数据,不断优化系统,以确保系统的可靠性和稳定性。

总结:通过使用消息追踪特性,我们可以对消息在 RabbitMQ 中的传递过程进行全面的监控和分析,从而确保系统的可靠性。追踪数据可以帮助我们发现潜在的问题,并采取措施来优化系统性能和稳定性。通过持续监控和优化,我们可以不断提高系统的可靠性,确保消息在系统中的传递是稳定和可靠的。

11.2 负载均衡

了解如何在 RabbitMQ 集群中实现负载均衡,以确保集群的高可用性和稳定性。

11.2.1 客户端内部实现负载均衡

在 RabbitMQ 客户端内部实现负载均衡可以帮助分摊消息处理的压力,从而提高消息处理的效率和性能。负载均衡的目标是将消息均匀地分发给多个消费者,确保每个消费者都能处理大致相同数量的消息,从而避免出现消息处理的不均衡现象。

下面介绍如何在 RabbitMQ 客户端内部实现负载均衡:

  1. 创建多个消费者: 首先,我们需要创建多个消费者实例,每个消费者实例对应一个消费者。这些消费者实例可以运行在不同的线程或进程中,也可以部署在不同的服务器上。
  2. 使用订阅模式: 在 RabbitMQ 中,可以使用订阅模式(Subscription Model)来实现负载均衡。订阅模式中,每个消费者都会订阅一个队列,并通过消费者标签(Consumer Tag)进行标识。
  3. 设置消费者数量限制: 可以通过配置参数来设置每个队列允许的最大消费者数量。这样可以确保每个队列的消息能够被均匀地分发给多个消费者。
  4. 使用轮询算法: 在实现负载均衡时,常用的方法是使用轮询算法(Round-Robin)来决定消息分发的顺序。轮询算法简单高效,每次将消息依次分发给不同的消费者,实现了基本的负载均衡。
  5. 消费者优先级: 在一些特殊情况下,我们可以为消费者设置优先级,让某些消费者处理更重要的消息,从而实现更细粒度的负载均衡。
  6. 消息预取(Prefetch): RabbitMQ 支持预取(Prefetch)机制,可以设置每个消费者能够预取(Prefetch)的消息数量。通过合理设置预取数量,可以避免某个消费者在处理过程中堆积过多的消息,从而保持负载均衡。

总结:通过在 RabbitMQ 客户端内部创建多个消费者,并使用订阅模式和轮询算法,我们可以实现负载均衡,将消息均匀地分发给多个消费者,从而分摊消息处理的压力,提高消息处理的效率和性能。负载均衡是一个重要的技术,特别是在大规模的分布式系统中,通过合理配置和优化,可以实现高吞吐量和低延迟的消息处理。

11.2.2 使用 HAProxy 实现负载均衡

通过 HAProxy 可以实现 RabbitMQ 集群的负载均衡,将客户端的请求均匀地分发给不同的 RabbitMQ 节点,从而实现高可用和高吞吐量的消息处理。下面介绍如何通过 HAProxy 实现 RabbitMQ 集群的负载均衡:

  1. 安装和配置 HAProxy: 首先需要在一台服务器上安装和配置 HAProxy。可以使用适合自己操作系统的包管理工具进行安装,并修改 HAProxy 的配置文件(一般是位于 /etc/haproxy/haproxy.cfg)。
  2. 配置后端 RabbitMQ 节点: 在 HAProxy 的配置文件中,配置后端 RabbitMQ 节点的信息。指定每个节点的 IP 地址和端口号,以及使用的协议。可以使用 server 关键字来定义每个节点,例如:
backend rabbitmq_nodes
    server node1 192.168.1.101:5672 check
    server node2 192.168.1.102:5672 check
    server node3 192.168.1.103:5672 check
    ...

在上面的配置中,我们定义了三个后端节点,分别是 node1、node2 和 node3,它们的 IP 地址和端口号分别是 192.168.1.101:5672、192.168.1.102:5672 和 192.168.1.103:5672。check 参数表示 HAProxy 会定期检查这些节点的健康状态,确保它们正常运行。

  1. 配置前端监听: 在 HAProxy 的配置文件中,配置前端监听,指定客户端连接 HAProxy 的 IP 地址和端口号,并将请求转发到后端 RabbitMQ 节点。例如:
frontend rabbitmq_frontend
    bind *:5672
    mode tcp
    default_backend rabbitmq_nodes

在上面的配置中,我们配置了一个前端监听,监听在 5672 端口上,并将请求转发到名为 rabbitmq_nodes 的后端节点。

  1. 启动 HAProxy: 配置完成后,保存并退出配置文件。然后启动 HAProxy 服务,确保它正常运行。
  2. 连接 RabbitMQ 集群: 现在,客户端可以通过连接到 HAProxy 的 IP 地址和端口号(即 192.168.1.100:5672)来访问 RabbitMQ 集群。HAProxy 会根据负载均衡算法将请求转发到不同的后端 RabbitMQ 节点,实现消息处理的负载均衡。

总结:通过配置 HAProxy,我们可以实现 RabbitMQ 集群的负载均衡,提高消息处理的效率和可用性。HAProxy 是一个强大的负载均衡工具,可以用于各种分布式系统的负载均衡场景。注意在配置时,需要确保 RabbitMQ 节点正常运行,并且 HAProxy 与 RabbitMQ 节点之间的网络连接畅通,以确保负载均衡的顺利进行。

11.2.3 使用 Keepalived 实现高可靠负载均衡

使用 Keepalived 可以实现 RabbitMQ 集群的高可用负载均衡,保证 RabbitMQ 服务的高可用性和可靠性。Keepalived 是一个用于实现高可用性的软件,它可以通过虚拟 IP(VIP)实现在多台服务器之间的故障转移,从而确保服务的连续性。下面介绍如何使用 Keepalived 实现 RabbitMQ 集群的高可用负载均衡:

  1. 安装和配置 Keepalived: 首先需要在每个 RabbitMQ 节点上安装 Keepalived。可以使用适合自己操作系统的包管理工具进行安装,并修改 Keepalived 的配置文件(一般是位于 /etc/keepalived/keepalived.conf)。
  2. 配置虚拟 IP(VIP): 在 Keepalived 的配置文件中,配置虚拟 IP(VIP),这个 IP 地址将用于客户端连接 RabbitMQ 集群。指定 VIP 的 IP 地址和网络接口,例如:
vrrp_instance rabbitmq_vip {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass your_password
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

在上面的配置中,我们配置了一个 VIP 地址为 192.168.1.100,它将绑定到 eth0 网络接口。state MASTER 表示该节点为主节点,其他节点可以配置为 state BACKUP,以实现主备节点的故障转移。

  1. 配置 RabbitMQ 节点信息: 在 Keepalived 的配置文件中,配置 RabbitMQ 节点的信息。指定每个节点的 IP 地址和端口号,以及使用的协议。例如:
real_server rabbitmq_node1 {
    192.168.1.101 5672
    weight 1
    TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 5672
    }
}

real_server rabbitmq_node2 {
    192.168.1.102 5672
    weight 1
    TCP_CHECK {
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        connect_port 5672
    }
}

...

在上面的配置中,我们配置了两个 RabbitMQ 节点,分别是 rabbitmq_node1 和 rabbitmq_node2,它们的 IP 地址和端口号分别是 192.168.1.101:5672 和 192.168.1.102:5672。

  1. 启动 Keepalived: 配置完成后,保存并退出配置文件。然后启动 Keepalived 服务,确保它正常运行。
  2. 连接 RabbitMQ 集群: 现在,客户端可以通过连接到 VIP 地址(即 192.168.1.100:5672)来访问 RabbitMQ 集群。Keepalived 会自动将客户端的请求转发到当前主节点(具有 VIP)的 RabbitMQ 节点上,实现负载均衡和高可用。

总结:通过配置 Keepalived,我们可以实现 RabbitMQ 集群的高可用负载均衡,保证 RabbitMQ 服务的高可用性和可靠性。Keepalived 提供了一种简单且可靠的方式来实现主备节点的故障转移,从而确保 RabbitMQ 服务的连续性。注意在配置时,需要确保 RabbitMQ 节点正常运行,并且 Keepalived 与 RabbitMQ 节点之间的网络连接畅通,以确保高可用负载均衡的顺利进行。

11.2.4 使用 Keepalived+LVS 实现负载均衡

通过 Keepalived 和 LVS(Linux Virtual Server)可以实现 RabbitMQ 集群的负载均衡,保证 RabbitMQ 服务的高可用性和性能优化。Keepalived 用于实现高可用性,而 LVS 则用于实现负载均衡。下面介绍如何使用 Keepalived 和 LVS 来实现 RabbitMQ 集群的负载均衡:

  1. 安装和配置 Keepalived: 首先需要在每个 RabbitMQ 节点上安装 Keepalived。可以使用适合自己操作系统的包管理工具进行安装,并修改 Keepalived 的配置文件(一般是位于 /etc/keepalived/keepalived.conf)。
  2. 配置虚拟 IP(VIP): 在 Keepalived 的配置文件中,配置虚拟 IP(VIP),这个 IP 地址将用于客户端连接 RabbitMQ 集群。指定 VIP 的 IP 地址和网络接口,例如:
vrrp_instance rabbitmq_vip {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass your_password
    }
    virtual_ipaddress {
        192.168.1.100
    }
}

在上面的配置中,我们配置了一个 VIP 地址为 192.168.1.100,它将绑定到 eth0 网络接口。state MASTER 表示该节点为主节点,其他节点可以配置为 state BACKUP,以实现主备节点的故障转移。

  1. 配置 LVS 策略: 在 RabbitMQ 集群之前的一个节点上配置 LVS 策略,用于将客户端请求均衡地转发到 RabbitMQ 节点上。LVS 提供了多种负载均衡算法,如 Round Robin、Least Connections 等,可以根据实际需求选择合适的算法。配置示例如下:
virtual_server 192.168.1.100 5672 {
    delay_loop 10
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 192.168.1.101 5672 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 5672
        }
    }

    real_server 192.168.1.102 5672 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 5672
        }
    }
}

在上面的配置中,我们配置了一个 LVS 策略,将 VIP 地址 192.168.1.100:5672 转发到两个 RabbitMQ 节点 192.168.1.101:5672 和 192.168.1.102:5672 上,使用的负载均衡算法是 Round Robin(lb_algo rr)。

  1. 启动 Keepalived 和 LVS: 配置完成后,保存并退出配置文件。然后启动 Keepalived 和 LVS 服务,确保它们正常运行。
  2. 连接 RabbitMQ 集群: 现在,客户端可以通过连接到 VIP 地址(即 192.168.1.100:5672)来访问 RabbitMQ 集群。LVS 会根据负载均衡策略将客户端的请求转发到合适的 RabbitMQ 节点上,实现负载均衡和高可用。

总结:通过配置 Keepalived 和 LVS,我们可以实现 RabbitMQ 集群的负载均衡和高可用性,提高消息处理的性能和可靠性。Keepalived 提供了故障转移机制,保证 RabbitMQ 服务的高可用性;而 LVS 提供了负载均衡机制,将客户端请求均衡地转发到 RabbitMQ 节点上,实现消息的负载均衡。注意在配置时,需要确保 RabbitMQ 节点正常运行,并且 Keepalived 和 LVS 与 RabbitMQ 节点之间的网络连接畅通,以确保负载均衡和高可用性的顺利进行。

11.3 小结

本章介绍了 RabbitMQ 的扩展特性,包括消息追踪、负载均衡等内容。通过学习这些高级特性,您可以更好地应对复杂的消息传递场景。在附录中,我们提供了集群元数据信息示例、HTTP API 接口详细内容以及网络分区图谱等供参考。在学习完这些内容后,您将对 RabbitMQ 有一个全面而深入的了解,并能够灵活应用 RabbitMQ 来构建高性能、可靠的消息传递系统。

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

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

相关文章

机器学习、人工智能、深度学习三者的区别

目录 1、三者的关系 2、能做些什么 3、阶段性目标 1、三者的关系 机器学习、人工智能(AI)和深度学习之间有密切的关系,它们可以被看作是一种从不同层面理解和实现智能的方法。 人工智能(AI):人工智能是一…

【网络编程·传输层】UDP和TCP的报头

目录 一、端口号划分 二、部分指令 1、pidof(用于查看进程id) 2、netstat(查看网络状态) 三、UDP协议 1、UDP协议格式 2、UDP协议如何进行封装、解包、分用 2.1封装、解包 2.2分用 3、UDP协议的特点 3.1UDP协议的特点 …

外部链接跳转到vue项目传递参数实现单点登录

1、问题背景描述: 我有一个困扰了很久项目需求,前台门户用的MVC,前台登录之后需要能点击某个按钮就能进入后台vue开发的前端项目,不需要重新登录。这个需求中mvc项目相对于vue项目来说是外部链接,他要跳转到vue项目&a…

HarmonyOS应用开发的新机遇与挑战

HarmonyOS 4已经于2023年8月4日在HDC2023大会上正式官宣。对广大HarmonyOS开发者而言,这次一次盛大的大会。截至目前,鸿蒙生态设备已达7亿台,HarmonyOS开发者人数超过220万。鸿蒙生态充满着新机遇,也必将带来新的挑战。 HarmonyO…

卷积神经网络实现MNIST手写数字识别 - P1

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:365天深度学习训练营-第P1周:实现mnist手写数字识别🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同…

架构训练营学习笔记:5-3接口高可用

序 架构决定系统质量上限,代码决定系统质量下限,本节课串一下常见应对措施的框架,细节不太多,侧重对于技术本质有深入了解。 接口高可用整体框架 雪崩效应:请求量超过系统处理能力后导致系统性能螺旋快速下降 链式…

mssqlmysql数据库忽略大小写

一、mssql -- 创建数据时指定排序集Latin1_General_CI_AS CREATE DATABASE [数据库名] COLLATE Latin1_General_CI_AS 查询效果: 二、mysql

课程作业-基于Python实现的迷宫搜索游戏附源码

简单介绍一下 该项目不过是一个平平无奇的小作业,基于python3.8开发,目前提供两种迷宫生成算法与三种迷宫求解算法,希望对大家的学习有所帮助。 项目如果有后续的跟进将会声明,目前就这样吧~ 效果图如下所示: 环境…

AP2400 LED汽车摩灯照明电源驱动 过EMC DC-DC降压恒流IC

产品特点 宽输入电压范围:5V~100V 可设定电流范围:10mA~6000mA 固定工作频率:150KHZ 内置抖频电路,降低对其他设备的 EMI干扰 平均电流模式采样,恒流精度更高 0-100%占空比控制&#xff0…

基于Pyqt5+serial的串口电池监测工具

本章,其他的没有,废话没有,介绍一下新开源了一个公司的测试工具,写了差不多三周吧。先来看看界面: 这是一个串口调试界面,使用Pyqt5serial完成。升级功能暂未移入,占一个坑位。 基于serial二次开…

javaAPI(一):String

String的特性 String底层源码 1、String声明为final,不可被继承 2、String实现了Serializable接口:表示字符支持序列化 实现了Comparable接口:表示String可以比较大小 3、String内部定义了final char[] value用于存储字符串 4、通过字面量的…

20天突破英语四级高频词汇——第①天

20天突破英语四级高频词汇~第一天加油(ง •_•)ง💪 🐳博主:命运之光 🌈专栏:英语四级高频词汇速记 🌌博主的其他文章:点击进入博主的主页 目录 20天突破英语四级…

CSS基础介绍笔记1

官方文档 CSS指的是层叠样式(Cascading Style Sheets)地址:CSS 教程离线文档:放大放小:ctrl鼠标滚动为什么需要css:简化修改HTML元素的样式;将html页面的内容与样式分离提高web开发的工作效率&…

windows开机运行jar

windows开机自启动jar包: 一、保存bat批处理文件 echo off %1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit java -jar E:\projects\ruoyi-admin.jar > E:\server.log 2>&1 &…

自监督去噪:Neighbor2Neighbor原理分析与总结

文章目录 1. 方法原理1.1 先前方法总结1.2 Noise2Noise回顾1.3 从Noise2Noise到Neighbor2Neighbor1.4 框架结构2. 实验结果3. 总结 文章链接:https://arxiv.org/abs/2101.02824 参考博客:https://arxiv.org/abs/2101.02824 1. 方法原理 1.1 先前方法总…

C数据结构与算法——哈希表/散列表创建过程中的冲突与聚集(哈希查找) 应用

实验任务 (1) 掌握散列算法(散列函数、散列存储、散列查找)的实现; (2) 掌握常用的冲突解决方法。 实验内容 (1) 选散列函数 H(key) key % p,取散列表长 m 为 10000,p 取小于 m 的最大素数; (2) 测试 α…

javaWeb项目--二级评论完整思路

先来看前端需要什么吧: 通过博客id,首先需要显示所有一级评论,包括评论者的头像,昵称,评论时间,评论内容 然后要显示每个一级评论下面的二级评论,包括,评论者的头像,昵称…

python:基于Kalman滤波器的移动物体位置估计

CSDN@_养乐多_ Kalman滤波器是一种经典的估计方法,广泛应用于估计系统状态的问题。本篇博客将介绍Kalman滤波器的基本原理,并通过一个简单的Python代码示例,演示如何使用Kalman滤波器来估计移动物体的位置。 通过运行代码,我们将得到一个包含两个子图的图像,分别展示了估…

数学知识(三)

一、容斥原理 #include<iostream> #include<algorithm>using namespace std;const int N 20;typedef long long LL; int n,m; int p[N];int main() {cin>>n>>m;for(int i 0;i < m;i ) cin>>p[i];int res 0;//从1枚举到2^m(位运算)for(int …

SpringBoot+vue 大文件分片下载

学习链接 SpringBootvue文件上传&下载&预览&大文件分片上传&文件上传进度 VueSpringBoot实现文件的分片下载 video标签学习 & xgplayer视频播放器分段播放mp4&#xff08;Range请求交互过程可以参考这个里面的截图&#xff09; 代码 FileController …