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

EMQX集群搭建

集群搭建

通过使用 EMQX 集群,您可以在一个或多个节点发生故障时仍然保持集群运行,从而享受到容错和高可用性的好处。

尽管没有严格的上限,但建议在 EMQX 开源版中将集群大小限制为三个节点。仅使用核心类型节点时,较小的集群规模通常能确保更高的稳定性。

工作原理

集群中的每个节点都运行一个 EMQX 实例,每个节点与集群中的其他节点通信,共享客户端连接、订阅、发布消息等信息。这允许集群在节点之间自动分配负载并在节点出现故障时提供高可用性。

EMQX 集群在不同节点上维护数据的多个副本来提供数据冗余,即使一个节点发生故障,数据在集群中的其他节点上仍然可用。

在集群架构下,您可以随着业务的增长向集群添加新节点,从而提供可扩展性。这使您可以处理越来越多的客户端和消息,而不必担心单个代理的限制。

EMQX 由 Erlang/OTP 驱动,Erlang/OTP 最初是爱立信为电信设备开发和设计的编程语言平台。正式介绍 EMQX 集群之前,我们首先来了解下什么是 Erlang/OTP。

EMQX 集群中至少要有一个 Core 节点,出于高可用的目的,EMQX Operator 建议 EMQX 集群至少有三个 Core 节点。

节点名称

EMQX 节点通过它们的名称来识别。所有节点都设置了唯一的节点名称,格式为 name@host,其中 host 必须是 IP 地址或完全限定域名(FQDN)。例如:

    对于部署在服务器 s1.emqx.io 上的 EMQX 节点,节点名称应为 emqx@s1.emqx.io;

    如果此服务器有一个静态 IP(192.168.0.10),节点名称应为 emqx@192.168.0.10。

核心节点

核心节点作为数据库的数据层,节点间以全网状连接,每个节点都包含一个最新的数据副本,这保证了容错性:只要有一个节点存活,数据就不会丢失。核心节点一般是静态和持久的,不建议进行自动伸缩(即经常添加、删除或替换节点)。

复制节点

复制节点会连接到核心节点,并被动地复制来自核心节点的数据更新。复制节点不允许执行任何的写操作,而是将其转交给核心节点代为执行。同时,由于复制节点有一个完整的本地数据副本,因此数据读取速度非常快,这样有助于降低 EMQX 路由的时延。

更高的水平可扩展性:EMQX 5.0 已能支持包含 23 个节点的大规模集群。

在 EMQX 5.0 中,所以如果不做任何调整的话所有节点都默认为核心节点,默认行为和 4.x 版本是一致的,这能够避免增加上手和使用的难度,您可以按照 4.x 版本的使用经验进行集群部署。

只有集群规模超过 3 个节点,才建议使用 Core + Replicant 复制模式。

集群中至少要有一个核心节点,我们建议设置 3 个核心节点 + N 个复制节点作为初始集群规格。

根据业务需求,核心节点可以连接 MQTT 客户端,也可以纯粹作为集群的数据库来使用,我们建议:

    在小型集群中(3 个节点或更少),没有必要使用 Core + Replicant 复制模式,而是让核心节点承载所有连接。

    在超大的集群中(10 个节点或更多),核心节点不承载 MQTT 连接,这样更加稳定性和水平扩展性更好。

    在中型集群中,核心节点是否承载 MQTT 连接取决于许多因素,需要根据您实际的场景测试才能知道哪个选择更优。

核心节点之间的网络延迟建议 10ms 以下,实测高于 100ms 将不可用,请将核心节点部署在同一个私有网络下;复制节点和核心节点之间同样建议部署在同一个私有网络下,但网络质量要求可以比核心节点间略低。

节点发现

节点发现是创建集群的必要过程,它允许单个 EMQX 节点发现对方并互相通信,无论其位置或 IP 地址如何。

手动与自动集群

根据节点发现的方式,集群的创建方式可以分为手动集群与自动集群。

手动集群是通过使用命令来指定哪些节点应该成为集群的一部分来创建 EMQX 集群。自动集群是另一种方法,它允许多个 EMQX 节点在无需手动配置的情况下自动形成集群。自动集群简化了设置 EMQX 集群的过程,使动态地添加或从集群中移除节点变得更加容易。EMQX 支持基于静态节点列表、DNS 记录、etcd 和 Kubernetes 的自动集群。以下表格展示了 EMQX 支持的不同节点发现策略和集群创建方法:

集群搭建

192.168.110.158

192.168.110.159

192.168.110.160

下载地址

https://www.emqx.com/zh/downloads-and-install/broker?os=RHEL

下载 emqx-5.7.2-el7-amd64.tar.gz

wget https://www.emqx.com/zh/downloads/broker/5.7.2/emqx-5.7.2-el7-amd64.tar.gz

安装

mkdir -p emqx && tar -zxvf emqx-5.7.2-el7-amd64.tar.gz -C emqx

启动

./emqx/bin/emqx start

修改配置文件

vim   /etc/emqx/emqx.conf

158配置:

node {

  name = "emqx@192.168.110.158"        #指定了节点的名称

  cookie = "emqxsecretcookie"       #用于集群节点之间的身份验证。所有集群节点都必须使用相同的cookie值才能加入集群

  data_dir = "data"       #指定了EMQX存储数据的目录路径,例如日志文件、持久化队列等

}

cluster {

  name = emqxcl                    #指定了集群的名称,所有集群成员都必须使用相同的名称

  discovery_strategy = manual      #指定了集群发现策略,manual意味着集群成员之间的关系需要手动配置

}

160配置:

node {

  name = "emqx@192.168.110.160"        #指定了节点的名称

  cookie = "emqxsecretcookie"       #用于集群节点之间的身份验证。所有集群节点都必须使用相同的cookie值才能加入集群

  data_dir = "data"       #指定了EMQX存储数据的目录路径,例如日志文件、持久化队列等

}

cluster {

  name = emqxcl                    #指定了集群的名称,所有集群成员都必须使用相同的名称

  discovery_strategy = manual      #指定了集群发现策略,manual意味着集群成员之间的关系需要手动配置

}

159配置:

node {

  name = "emqx@192.168.110.159"        #指定了节点的名称

  cookie = "emqxsecretcookie"       #用于集群节点之间的身份验证。所有集群节点都必须使用相同的cookie值才能加入集群

  data_dir = "data"       #指定了EMQX存储数据的目录路径,例如日志文件、持久化队列等

}

cluster {

  name = emqxcl                    #指定了集群的名称,所有集群成员都必须使用相同的名称

  discovery_strategy = manual      #指定了集群发现策略,manual意味着集群成员之间的关系需要手动配置

}

创建集群

#在160执行以下命令

./emqx_ctl cluster join emqx@192.168.110.158

#在158执行以下命令

./emqx_ctl cluster join emqx@192.168.110.160

#在159执行以下命令

./emqx_ctl cluster join emqx@192.168.110.160

#在任意一台执行以下命令,查询集群状态

./emqx_ctl cluster status

Cluster status: #{running_nodes =>

                      ['emqx@172.16.60.10','emqx@172.16.60.20',

                       'emqx@172.16.60.30'],

                  stopped_nodes => []}

emqx_ctl cluster join命令

emqx_ctl cluster join 命令用于将 EMQX 节点加入到指定的集群中。在执行此命令时,需要遵循以下规则:

  •     执行节点:此命令在需要加入集群的子节点上执行。也就是说,它不是在主节点上执行的,而是在尚未加入集群或希望重新加入集群的节点上执行。
  •     目标节点:命令中指定的节点(通过其节点名或IP地址)应该是集群中的现有成员,通常是集群的主节点或已经存在于集群中的其他节点。

    必须在待加入的节点执行该命令,以请求而不是邀请加入到集群。

    emqx@node2.emqx.com 加入 emqx@node1.emqx.com 组成集群后,它将清除本地数据并将 emqx@node1.emqx.com 中的数据同步过来。

    已加入集群的节点加入另一个集群时,该节点将离开当前集群。如需退出集群请参考退出集群。

web界面验证

    ip地址:18083

    ip地址可以是两个的任意一个IP地址即可

    默认账号:admin,密码:public

集群负载均衡

    负载均衡(Load Balancing)用于均衡多个网络组件的负载,从而优化资源的使用,避免由于组件过载造成故障。负载均衡虽然不是集群中的必备组件,但是能给集群带来一些非常有用的特性,例如当配置在 EMQX 集群中时,将能带来如下优势:

        均衡 EMQX 的负载,避免出现单节点过载的情况;

        简化客户端配置,客户端只需连接到负载均衡器上,无需关心集群内部伸缩变化;

        TLS/SSL 终结,减轻 EMQX 集群的负担;

        提高安全性,有了负载均衡在集群前端,能够通过设置阻止不需要的流量,保护 EMQX 集群免受恶意攻击。

NGINX 负载均衡 EMQX 集群

    NGINX 是一种高性能多功能的服务器软件,可以作为 Web 服务器和反向代理服务器,除此以外,NGINX 还可以作为负载均衡器将来自客户端的请求分发到多个后端服务器,以确保负载平衡和性能优化。NGINX 非常适用于物联网应用,因为它可以处理大量的并发请求。在物联网中,设备数量庞大,因此需要一个可以处理大量请求的服务器来保证稳定性。EMQX 原生支持由多个 MQTT 服务器组成的分布式集群架构,因此,使用 NGINX 部署负载均衡以及 EMQX 集群,可以保证高可用性和可扩展性。

功能与优势

使用 NGINX 负载均衡 EMQX 集群具备以下几个功能和优势:

  • 作为反向代理服务器,NGINX 位于 MQTT 服务器端,代表 MQTT 客户端向 EMQX 集群发起 MQTT 连接请求,并代替 EMQX 集群处理请求,然后将 EMQX 集群的响应返回给 MQTT 客户端。这样的设置可以将多个集群隐藏起来,暴露一个接入点给 MQTT 客户端。MQTT 客户端只需要与 NGINX 通信,而不需要知道后面的集群数量和布局,这种方式可以提高系统的可维护性和可扩展性。
  • NGINX 可用于终结 MQTT 客户端与 EMQX 集群之间经 SSL 加密的 MQTT 连接,减轻 EMQX 集群的加密解密负担。从而提供多种优势,如提高性能、简化证书管理和增强安全性。
  • NGINX 具有灵活的负载均衡策略,以使用不同的策略来决定请求应该发送到集群中的哪个 EMQX 节点,有助于分摊流量和请求,提高性能和可靠性。例如粘性负载平衡,可将请求路由到同一后端服务器,从而提高性能和会话持久性。

​​​​​​​下载并解压nginx安装包

官网地址:

nginx: download

下载包地址:

http://nginx.org/download/nginx-1.20.2.tar.gz

//下载tar包

wget http://nginx.org/download/nginx-1.24.0.tar.gz

wget http://nginx.org/download/nginx-1.24.0.tar.gz

解压缩

tar -xvf nginx-1. 24.0.tar.gz

进入解压后的目录

cd nginx-1. 24.0

在nginx 目录下执行./configure

./configure --prefix=/usr/local/nginx

初始化安装,--prefix指定安装目录

nginx-1. 23.4

./configure \

 --with-threads \

 --with-http_stub_status_module \

  --with-http_ssl_module \

  --with-http_realip_module \

  --with-stream \

  --with-stream_ssl_module

执行安装

make && make install

修改配置文件

vim  /usr/local/nginx/conf/nginx.conf

worker_processes  auto;    #指定Nginx启动的工作进程数,auto表示根据系统的CPU核心数自动设置工作进程数

events {

    worker_connections  1024;   #定义事件模块,worker_connections指定每个工作进程可以同时打开的最大连接数,这里是1024

}

error_log   /data/nginx/logs/error.log warn;       #定义错误日志文件的位置和日志级别,这里设置为警告级别及以上

pid         /data/nginx/nginx.pid;            #指定存储Nginx主进程ID的文件路径

    stream {              #定义一个流模块,用于配置TCP/UDP代理

    #定义自定义日志格式,包含客户端地址、端口、协议、状态码、时间戳、上游服务器地址、发送字节数和连接时间

      log_format proxy '$remote_addr $remote_port $protocol $status

                        [$time_iso8601] '

                        '"$upstream_addr" "$upstream_bytes_sent"

                        "$upstream_connect_time"' ;

      access_log /data/nginx/logs/access.log  proxy;    #指定访问日志文件的路径,并使用上面定义的proxy日志格式

      upstream mqtt_servers {     #定义一个名为mqtt_servers的上游服务器组,用于负载均衡

              #在上游服务器组中添加一个服务器,指定其IP地址和端口号,以及最大失败次数和故障超时时间

        server 192.168.110.158:1883 max_fails=2 fail_timeout=10s;

        server 192.168.110.160:1883 max_fails=2 fail_timeout=10s;      

  }

  server {            #定义一个服务器块,用于配置代理服务器的监听端口和其他设置

    listen 1886;  #指定Nginx监听的端口号,这里是1883,通常用于MQTT协议

    proxy_pass mqtt_servers; #指定代理请求转发的上游服务器组名称

    proxy_protocol on;           #启用PROXY协议,允许获取客户端的真实IP地址和端口信息

    proxy_connect_timeout 10s;   #设置与上游服务器建立连接的超时时间

    proxy_timeout 1800s;             #设置代理服务器的读写超时时间,这里是30分钟

    proxy_buffer_size 3M;           #设置代理缓冲区的大小

    tcp_nodelay on;                      #启用TCP_NODELAY选项,意味着立即发送数据而不等待更多数据积累

  }

}

检查Nginx 是否在监听端口

在 Nginx 服务器上,可以使用 netstat 或 ss 命令来检查 Nginx 是否在监听 1886 端口:

sudo netstat -tulnp | grep 1886 

# 或者 

sudo ss -tulnp | grep 1886

测试连接

可以使用 telnet 或 netcat(nc)工具来测试是否能够成功连接到 Nginx 监听的端口。

Telnet 192.168.110.160 1886 

# 或者 

nc -v 192.168.110.160 1886

使用 MQTT 客户端测试

安装一个 MQTT 客户端(如 MQTT.fx、MQTT Explorer 或 Mosquitto 的 mosquitto_pub 和 mosquitto_sub 工具),并尝试通过 Nginx 转发到 EMQX 集群发布和订阅消息。

优点:

集群提供了容错性

一个节点故障,其它节点仍可用

故障节点恢复后仍然可以参与到集群中

相关文章:

EMQX集群搭建

集群搭建 通过使用 EMQX 集群,您可以在一个或多个节点发生故障时仍然保持集群运行,从而享受到容错和高可用性的好处。 尽管没有严格的上限,但建议在 EMQX 开源版中将集群大小限制为三个节点。仅使用核心类型节点时,较小的集群规模…...

【Flink系列】10. Flink SQL

10. Flink SQL Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理&#xff08…...

Java安全—SPEL表达式XXESSTI模板注入JDBCMyBatis注入

前言 之前我们讲过SpringBoot中的MyBatis注入和模板注入的原理,那么今天我们就讲一下利用以及发现。 这里推荐两个专门研究java漏洞的靶场,本次也是根据这两个靶场来分析代码,两个靶场都是差不多的。 https://github.com/bewhale/JavaSec …...

TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG

注:本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态:SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层,有个 FLAGS 字段,这个字段有…...

OSPF的LSA的学习研究

OSPF常见1、2、3、4、5、7类LSA的研究 1、拓扑如图,按照地址表配置,激活OSPF划分相关区域并宣告相关网段 2、1类LSA,每台运行了OSPF的路由器都会产生,描述了路由器的直连接口状况和cost 可以看到R1产生了一条router lsa&#xff0…...

C# OpenCV机器视觉:转速测量

在一个看似平常却又暗藏神秘能量的日子里,阿杰正在他那充满科技感的实验室里,对着一堆奇奇怪怪的仪器发呆。突然,手机铃声如一道凌厉的剑气划破寂静,原来是工厂的赵厂长打来的紧急电话:“阿杰啊,咱们工厂新…...

wireshark 网络分析工具

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网络安全从菜鸟到飞鸟的逆袭 目录 一、网络截获数据包的基础1、以太网…...

XXL-JOB 加入 GitCode:推动分布式任务调度进阶发展

在当今企业数字化转型加速的时代背景下,任务调度在保障系统高效运行方面的关键作用日益凸显。XXL-JOB 正式加入 GitCode,成为 G-Star 优秀毕业项目,为分布式任务调度领域带来了新的契机与活力,助力企业应对复杂多变的业务需求。 X…...

Java Web开发进阶——WebSocket与实时通信

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,广泛应用于需要实时数据交换的应用程序中。它能够实现服务器与客户端之间的双向通信,避免了传统 HTTP 请求/响应的延迟。结合 Spring Boot,开发实时通信应用变得更加高效与简便。 1. …...

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one(青柠学术插件)的时候,使用插件跳转obsidian中的对应笔记,出现上图情况。(错误中提到的…...

晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告,步骤略有繁琐,不建议作为参考内容,可以适当浏览,进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统(HDFS)的基本操作。 …...

Rust:指针 `*T` 和引用 `T`的区别

在 Rust 编程语言中,*T 和 &T 是两种不同类型的指针,它们各自代表了不同的内存访问方式和所有权模型。 *T(原始指针或裸指针): *T 是一个原始指针(也称为裸指针或裸引用),它可以…...

【2025最新版】PCL点云处理算法汇总(C++长期更新版)

博客长期更新,最近一次更新时间为:2025年1月17日。 pcl::copyPointCloud(*cloud, indicesY, *cloud_yboundary);目录 配库常用数据免费下载链接一、点云滤波1、常用滤波器2、采样滤波3、裁剪滤波 二、KD树与八叉树1、KD树2、八叉树 三、点云配准粗配准精…...

换了城市ip属地会变吗?为什么换了城市IP属地不变

当我们跨越城市的界限,从一个地方迁移到另一个地方时,许多日常使用的网络服务和应用程序都会感知到这种变化,其中一个显著的现象就是IP属地的变化。IP属地,即IP地址所在的地理位置信息,它通常与互联网服务提供商&#…...

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…...

Windows安装Jenkins——及修改主目录、配置简体中文、修改插件源

一、简介 Jenkinshttps://www.jenkins.io/zh/ Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。 二、Windows安装配置Jenkins2.479 2.1、J...

【机器学习:二十二、机器学习项目开发的技巧】

机器学习项目开发的技巧 机器学习项目的开发不仅仅依赖于算法的选择和模型的调优,还需要良好的项目管理技巧和方法论。以下是机器学习项目开发中的关键技巧: 明确需求:在项目启动之前,明确问题定义和业务目标。例如,…...

用python实战excel和word自动化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 python实现excel和word自动化--批量处理 前言--需求快要期末了需要,提交一个年级的学生成绩数据,也就是几百份。当前我们收集了一份excel表格&#xf…...

Conda的一些常用命令

以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...

ESP8266 AP模式 网页配网 arduino ide

ESP8266的AP配网,可以自行配置网络,一个简单的demo,文档最后有所有的代码,已经测试通过. 查看SPIFFS文件管理系统中的文件 账号密码是否存在,如不存在进入AP配网,如存在进入wifi连接模式 // 检查Wi-Fi凭据if (isWiFiConfigured()) {Serial.println("找到Wi-Fi凭据&#…...

《AI与鸿蒙Next:建筑设计可视化的革新力量》

在建筑设计领域,可视化对于呈现设计理念、与客户沟通以及指导施工等环节都至关重要。人工智能与鸿蒙Next图形渲染技术的发展,为建筑设计可视化带来了前所未有的变革与机遇。 人工智能在建筑设计可视化中的作用 快速生成设计方案:人工智能可以…...

Edge Scdn是什么,它如何提升网站安全性与访问速度?

随着网络攻击的日益猖獗,尤其是分布式拒绝服务(DDoS)攻击的频繁发生,如何保护网站的安全性并确保用户的访问体验变得极为重要。Edge Scdn(内容分发网络)作为一种新兴的技术方案,逐渐被越来越多的…...

[Collection与数据结构] PriorityQueue与堆

1. 优先级队列 1.1 概念 前面介绍过队列,队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,该中场景下,使用队列显然…...

C#调用OpenCvSharp实现图像的开运算和闭运算

对图像同时进行腐蚀和膨胀操作,顺序不同则效果也不同。先腐蚀后膨胀为开运算,能够消除小斑点和细小的突出物、平滑图像以及改善边缘;先膨胀后腐蚀为闭运算,能够去除噪点、填补图像孔洞、连接邻近物体和平滑物体边界。   OpenCvS…...

okhttp断点续传

使用 OkHttp 实现断点续传,关键是通过设置 Range 请求头向服务器请求文件的部分内容。下面是详细的实现步骤和示例代码。 步骤 获取文件的总大小:在开始下载前,通常需要知道文件的总大小,可以通过发送一个初始请求来获取。记录已…...

异步 HTTP 请求

fetch 是一个用于进行异步 HTTP 请求的 JavaScript API。 fetch 基本用法 // 使用 fetch 进行 GET 请求 fetch(https://api.example.com/data).then(response > {// 检查响应是否成功if (!response.ok) {throw new Error(Network response was not ok);}// 解析响应数据为…...

仿射密码实验——Python实现(完整解析版)

文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1)初步了解古典密码 2)掌握仿射密码的实现 实验方法 根据下图仿射密码(变换…...

Ubuntu安装K8S

第一步: 安装docker Install Docker #注意docker是早期的名称已经过时了,因此请使用如下命令,一步到位安装docker-ce。 第二步:设置K8S源: (大陆使用aliyun源,大陆外使用google源)…...

C语言初阶习题【29】杨氏矩阵

1. 题目描述——杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 2. 思路 3. 代码实现1 #include<stdio.h>void fin…...

(01)FreeRTOS移植到STM32

一、以STM32的裸机工程模板 任意模板即可 二、去官网上下载FreeRTOS V9.0.0 源码 在移植之前&#xff0c;我们首先要获取到 FreeRTOS 的官方的源码包。这里我们提供两个下载 链 接 &#xff0c; 一 个 是 官 网 &#xff1a; http://www.freertos.org/ &#xff0c; 另…...

从AI生成内容到虚拟现实:娱乐体验的新边界

引言 在快速发展的科技时代&#xff0c;娱乐行业正经历一场前所未有的变革。传统的娱乐方式正与先进技术融合&#xff0c;创造出全新的沉浸式体验。从AI生成的个性化内容&#xff0c;到虚拟现实带来的身临其境的互动场景&#xff0c;科技不仅改变了我们消费娱乐的方式&#xf…...

买入的股票

银行12 工商&#xff0c;建设&#xff0c;农业&#xff0c;中国&#xff0c;招商&#xff0c;交通&#xff0c;邮储&#xff0c;中信&#xff0c;兴业&#xff0c;浦发&#xff0c;平安&#xff0c;光大 保险4&#xff1a;人寿&#xff0c;平安&#xff0c;太平洋&#xff0c…...

Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器

redisson-spring-boot-starter 是 Redisson 提供的 Spring Boot 集成包&#xff0c;旨在简化与 Redis 的交互&#xff0c;包括分布式锁、缓存、消息队列、布隆过滤器等功能的实现。 Maven 依赖 在 Spring Boot 项目中添加 redisson-spring-boot-starter 依赖&#xff1a; <…...

如何在 Rocky Linux 上安装极狐GitLab?

本文分享如何在 Rocky Linux 操作系统上安装极狐GitLab。 相关资料 极狐GitLab 在各种操作系统下的安装指南官网文档 前提条件 一个安装了 Rocky Linux 操作系统的云服务器 可以查看 /etc/os-release 中的信息&#xff0c;确认操作系统信息&#xff1a; NAME"Rocky …...

50.【8】BUUCTF WEB HardSql

进入靶场 随便输输 上order by ????????&#xff0c;被过滤了,继续找其他也被过滤的关键字 #&#xff0c;-- -&#xff0c;-- 都不行&#xff0c;尝试其他特殊字符后发现and&#xff0c;union&#xff0c;select&#xff0c;空格&#xff0c;都被过滤了 如下 我就不知…...

Shell的运行原理以及Linux中的权限问题

Shell的运行原理 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ &#xff0c;但我们一般用户&#xff0c;不能直接使用kernel。 而是通过kernel的“外壳”程序&#xff0c;也就是所谓的shell&#xff0c;来与kernel沟通。如…...

Maven在Win10上的安装教程

诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要&#xff0c;也可以从官网下载&#xff1a; 第一步&#xff1a;解压文件 第二步&#xff1a;设置环境变量 在系统变量处点击新建&#xff0c;输入变量名MAVEN_HOME&#xff0c;变量值为解压路径&#xff1a; 在系统变…...

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘&#xff08;520字节&#xff09;。21块盘组建了2组RAID6&#xff1a;一组有11块硬盘&#xff0c;一组有10块硬盘。 在存储运行过程中&#xff0c;管理员误操作删除了 2组…...

Go语言之路————func

Go语言之路————func 前言1.最基本的方法定义2.方法中参数的传递3.方法中的返回值4.匿名方法5.闭包的概念6.defer关键词 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go&#…...

基于 Electron 应用的安全测试基础 — 提取和分析 .asar 文件

视频教程在我主页简介或专栏里 目录&#xff1a; 提取和分析 .asar 文件 4.1. .asar 文件提取工具 4.1.1. 为什么选择 NPX&#xff1f; 4.2. 提取过程 4.3. 提取 .asar 文件的重要性 4.3.1 关键词 4.3.2 执行关键词搜索 4.3.2.1 使用命令行工具“grep”进行关键词搜索 4.3.2…...

微软与腾讯技术交锋,TRELLIS引领3D生成领域多格式支持新方向

去年 11 月&#xff0c;腾讯推出 Hunyuan3D 生成模型&#xff0c;是业界首个同时支持文字和图像生成 3D 的开源大模型。紧接着不到一个月&#xff0c;微软便发布了全新框架 TRELLIS&#xff0c;加入 3D 资产生成领域的竞争中。TRELLIS 支持多格式输出&#xff0c;包括辐射场、3…...

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快&#xff0c;最近准备在一个新项目上采用新一代的linux核心板&#xff0c;发现linux内核的版本已经更新到5.4以上甚至6.0以上&#xff1b;之前常用的linux内核版本是2.6.4&#xff0c;虽然在某些项目上还能用但是明显跟不上时代的步伐了&#xff0c;所以要…...

LabVIEW实现油浸式变压器自主监测与实时报告

油浸式变压器广泛应用于电力系统中&#xff0c;尤其是在电力传输和分配领域。为了确保变压器的安全、稳定运行&#xff0c;及时监测其工作状态至关重要。传统的变压器监测方法通常依赖人工巡检和定期检查&#xff0c;但这不能及时发现潜在的故障隐患&#xff0c;且效率较低。随…...

21_Spring Boot缓存注解介绍

前面我们通过使用@EnableCaching、@Cacheable注解实现了Spring Boot默认的基于注解的缓存管理,除此之外,还有更多的缓存注解以及注解属性可以配置优化缓存管理。下面我们针对Spring Boot中的缓存注解及相关属性进行详细讲解。 1.@EnableCaching注解 @EnableCaching是由Spri…...

Linux和Docker常用终端命令:保姆级图文详解

文章目录 前言1、Docker 常用命令1.1、镜像管理1.2、容器管理1.3、网络管理1.4、数据卷管理1.5、监控和性能管理 2、Linux 常用命令分类2.1、文件和目录管理2.2、用户管理2.3、系统监控和性能2.4、软件包管理2.5、网络管理 前言 亲爱的家人们&#xff0c;创作很不容易&#xf…...

【WRF理论第九期】输出文件:wrfout 和 wrfrst

【WRF理论第九期】输出文件:wrfout 和 wrfrst 1. wrfout 文件wrfout 文件读取(Python)2. wrfrst 文件参考在 WRF(Weather Research and Forecasting)模型中,wrfout 和 wrfrst 是两种重要的输出文件,分别代表不同类型的模拟结果和功能。 1. wrfout 文件 wrfout 文件是 …...

学习threejs,使用OrbitControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OrbitControls 相机控…...

CryptoMamba:利用状态空间模型实现精确的比特币价格预测

“CryptoMamba: Leveraging State Space Models for Accurate Bitcoin Price Prediction” 论文地址&#xff1a;https://arxiv.org/pdf/2501.01010 Github地址&#xff1a;https://github.com/MShahabSepehri/CryptoMamba 摘要 预测比特币价格由于市场的高波动性和复杂的非线…...

RocketMQ 知识速览

文章目录 一、消息队列对比二、RocketMQ 基础1. 消息模型2. 技术架构3. 消息类型4. 消费者类型5. 消费者分组和生产者分组 三、RocketMQ 高级1. 如何解决顺序消费和重复消费2. 如何实现分布式事务3. 如何解决消息堆积问题4. 如何保证高性能读写5. 刷盘机制 &#xff08;topic 模…...