MQ底层原理
RabbitMQ
概述
- RabbitMQ 是⼀个开源的⾼性能、可扩展、消息中间件(Message Broker),实现了 Advanced Message
Queuing Protocol(AMQP)协议,可以帮助不同应⽤程序之间进⾏通信和数据交换。 - RabbitMQ 是由 Erlang 开发的,⽀持多种编程语⾔,包括 Java、Python、Ruby、PHP、C# 等。它的
核⼼思想是将发送者(producer)与接收者(consumer)完全解耦,实现异步处理和低耦合度的系统架构。
RabbitMQ的消息消费链路
消息会exchange复制,然后派发到多个不同的队列上。同⼀条消息需要占⽤多份存储空间,空间利⽤率不是很⾼。
Broker
在消息队列(Message Queue,MQ)系统中,Broker 是核心组件,负责消息的接收、存储、路由和传递。它作为消息中间件的服务器端,协调生产者(Producer)和消费者(Consumer)之间的通信,确保消息可靠传输。
Broker 的工作流程
-
生产者将消息发送到 Broker。
-
Broker 根据配置的路由规则将消息存储到指定队列或主题。
-
Broker 将消息推送给消费者(Push 模式)或等待消费者拉取(Pull 模式)。
-
Broker 确认消息消费成功(ACK 机制),或重新投递未确认的消息。
Broker 的重要性
-
解耦:分离生产者和消费者,允许系统异步通信。
-
削峰填谷:应对流量高峰,避免服务过载。
-
可靠性:通过持久化和重试机制确保消息不丢失。
-
扩展性:通过集群横向扩展处理能力。
选择 Broker 的考量因素
-
性能:吞吐量、延迟(如 Kafka 适合高吞吐,RabbitMQ 适合低延迟)。
-
持久化机制:是否需要保证消息不丢失。
-
协议支持:是否兼容现有系统。
-
运维复杂度:集群管理、监控工具是否完善。
Exchange机制
Fanout类型
Fanout即⼴播模式
Direct类型
根据routing_key将消息投递到指定的队列上。
Topic类型
更加灵活的routing_key, ⽀持⽤通配符的⽅式处理消息的投递。
Header类型
更为细粒度的匹配逻辑,在投递消息的请求头上,注⼊多个header参数,路由规则是根据header的参 数去决定要投递哪个队列。
消息错误处理
- 消费异常的数据,会被投递到⼀条死信队列⾥⾯,后边重新再拉取消费。
- 消费端消费消息,写⼊db。(db的连接池满了,数据写⼊失败。消息重试:晚点再消费⼀次消息,过 ⼀段时间再去消费。)
消息顺序消费设计
RabbitMQ的顺序消费能⼒不⾏,消费者如果使⽤多线程消费,⽆法保证多线程的处理顺序。
多个消费者对应⼀条队列,也是会有顺序错乱的问题。
RocketMQ
组成部分
- Broker
- NameServer(注册中⼼)
客⼾端和NameServer建⽴⻓链接,然后获取得到Broker的地址,再去访问Broker进⾏消息的投递和消费。
长连接(Long Connection):客户端与服务器建立TCP连接后,在完成一次请求后不会立即关闭连接,而是保持连接状态,以便后续多次通信复用该连接。
RocketMQ的发送链路
消息会先被发送到broker端存储,然后触发⼀个 dispatch 的动作,将消息的“索引信息”投递到不同的消费队列上边。最后每个消费者和具体的⼀条队列绑定关系后,便可以从队列中拉取最新 dispatch 过来的消息。
从RocketMQ和RabbitMQ的消息发送链路来看,会有⼀些出⼊:
• RocketMQ的消息主要都存放在了CommitLog⾥⾯,在消费队列存储的是消息的“索引”信息。
• RocketMQ的⼀条队列,⼀次只能允许被⼀个消费者占⽤,不能让多个消费者访问。
消费组
RocketMQ⾥⾯会有消费组的概念,即同⼀个topic下会有多个消费者,多个消费者可以组成不同的组别。⽽同⼀个组别的多个消费者们所持有的队列是互斥的。
消息回溯
在RocketMQ官⽅提供的控制台上,是具备这⽅⾯能⼒的。
RocketMQ 的消息回溯功能允许消费者将消费进度(Offset)重置到过去的某个时间点或指定的消息位置,从而重新消费历史消息。
事务消息
RocketMQ在4.3.0版中开始⽀持分布式事务消息,RocketMQ采⽤了2PC的思想来实现了提交事务消息,同时增加⼀个补偿逻辑来处理⼆阶段超时或者失败的消息。
延迟消息
RocketMQ会在broker端,将需要延迟的消息都放在⼀个备份区域中(按照延迟的level放到不同的 queue⾥⾯去),然后有⼀个定时任务,扫描到期的数据,到期之后就将消息重新放⼊到对应队列⾥⾯。
RocketMQ的⾼性能原理
- 读写磁盘⾼性能的本质原因MMap技术
将磁盘空间映射到了内存区域,接着所有的写操作都是直接写⼊到了该块内存区域,然后根据策略同步/异步持久化到了磁盘中,这相对于传统的io磁盘性能要更⾼效。
RocketMQ对mmap技术的⼀些优化
• 预映射 + 内存锁定 (系统内核的api调⽤)
在RocketMQ启动阶段,会先提前预先锁定内存映射模块,避免映射的内存被操作系统给置换了出去。
Kafka
Kafka与Zookeeper
Kafka早期版本和zookeeper其实是需要组合使⽤的,不过后边的架构设计中,在逐渐的解除和zk的耦合。早期的Kafka架构设计⾥⾯,Zookeeper主要是负责管理起具体的broker机器信息。
- Broker启动的时候,把地址注册到broker上,也就是/kafka/broker/ids⽬录下写⼊broker的id。
- 然后多个broker争先抢占zk的⼀个节点,在/kafka/controller⽬录下,抢占到该节点的broker是
Controller⻆⾊(分布式锁思路),主要负责后续的topic编辑,分区管理等作⽤。这台Broker上会保存集群中最全的Broker数据信息,其他的Broker节点需要定期往这台机器上报⾃⼰的信息。 - zk的临时节点消失,其他Broker重新抢锁,选出新的 Controller⻆⾊
摒弃了zk依赖之后,其实后边Kafka使⽤了⾃研的 Controller Quorum 替换了之前zk的⻆⾊。
Kafka的消息发送和消费链路
Kafka的消息发送和消费架构其实和前边两款MQ的架构有点类似:
当producer发送消息抵达Broker之后,Broker会将发送过来的消息存放在不同的partition模块中,这⾥要注意,Kafka的partition你可以理解为类似于RocketMQ⾥⾯的CommitLog,存储实际消息的⼀个结构,但是它和RocketMQ的commitlog不同,Kafka不会把所有的topic信息都往⼀个commitlog⾥ ⾯去顺序写⼊,⽽是按照topic为粒度去写⼊。
这样设计的好处在于:多个主题,多个partition模块管理,可以让多核cpu的计算机充分发挥其性能。
在Kafka的集群架构⾥⾯,不同的Partition⽂件会被分散到不同的Broker上存放,这样可以让不同的机器负责不同的Partition⽂件写⼊,可以保证同⼀个Topic下的消息写⼊不会只单单受限于单台机器的硬件性能。
Kafka的消息存储原理
topic下的消息存储结构如下图所⽰,在⼀个segment下边会有.log,.index,.timestamp⽂件存在, Kafka⾥⾯的消息存储实际上是存在⼀个个不同的segment⾥⾯的。
所谓的segment其实也是⼀个虚拟的概念,实际映射到物理磁盘上,分成了.log,.index,.timestamp⽂件的组合。
• .log⽂件实际的数据存储⽂件,顺序写⼊存储。
• .index⽂件索引⽂件,⾥⾯保存了具体消息存在于.log的地址信息。
• .timestamp⽂件⽤于记录哪些消息是7天以内的,如果超过了7天,⼀般消息默认会被删除。
Kafka读写数据的⾼性能原理
- 写⼊数据⽤了MMap技术
MMap虚拟内存映射,能够实现⾮常⾼效的⽂件读写能⼒。
- 消费者拉取数据使⽤了SendFile技术
⽽ Linux 2.4+ 内核通过 sendfile 系统调⽤,提供了零拷⻉。磁盘数据通过 DMA 拷⻉到内核态 Buffer 后,直接通过 DMA 拷⻉到 NIC Buffer(socket buffer),⽆需 CPU 拷⻉。这也是零拷⻉这⼀说法的来源。除了减少数据拷⻉外,因为整个读⽂件 - ⽹络发送由⼀个 sendfile 调⽤完成,整个过程只有两次上下⽂切换,因此⼤⼤提⾼了性能。
Consumer -> broker 读数据(⽹络)(⽹卡接收consumer数据->broker读取数据(mmap定位数据)-> 通过⽹络发送给到consumer)
• 传统数据在⽹卡上的发送链路
• 使⽤SendFile技术后,数据在⽹卡端的发送链路
SendFile 是一种高效的文件传输技术,通过操作系统提供的系统调用(如 Linux 的 sendfile())实现数据直接从文件系统传输到网络套接字,避免数据在用户空间和内核空间之间的多次拷贝,从而显著提升传输性能。这种技术属于“零拷贝(Zero-Copy)”优化的一种实现。
三种消息队列对⽐
RabbitMQ | RocketMQ | Kafka | |
---|---|---|---|
语言 | erlang | java | Scala/Java |
性能 | 一般 | 强 | 非常强 |
消息存储 | 按照topic区别存储,消息复制到多个queue中。 | 所有topic的消息统一存储在一份commitlog里面。 | 按topic粒度分散在不同的partition中,底层以segment的.log文件为粒度进行存储。 |
运维难度 | 简单 | 简单 | 高 |
适用场景 | - 可靠性要求高的消息传递场景 - 广告推送,用户状态变更等 | - 可以覆盖RabbitMQ的场景 - 支持事务消息,结合最终一致性思想来用于解决分布式事务 - 支持延迟消息能力 - 实时计算,电商秒杀 - 高性能,高可用计算 | - 实时计算,大数据分析 - 日志采集 - 事件总线 |
失败重试 | 支持 | 支持 | 需要手动实现 |
性能 | 30mb/s | 650mb/s | 650mb/s |
相关文章:
MQ底层原理
RabbitMQ 概述 RabbitMQ 是⼀个开源的⾼性能、可扩展、消息中间件(Message Broker),实现了 Advanced Message Queuing Protocol(AMQP)协议,可以帮助不同应⽤程序之间进⾏通信和数据交换。RabbitMQ 是由 E…...
30分钟编写十大排序算法完成
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;//排序算法 public class test_04_22 {public static void swap(int[] nums, int i, int j){int temp nums[i];nums[i] nums[j];nums[j] temp;}//冒泡排序-稳定…...
为什么家电主板采用GND走线而不是整面铺GND铜
不管什么接地方式,本质是为了使得电流的回流路径最短。只要电流的回流路径最短,怎么都可以! 如下图的芯片的一个信号的回流路径,是一个很糟糕的接地!!!!!!&a…...
NVIDIA 自动驾驶技术见解
前言 参与 NVIDIA自动驾驶开发者实验室 活动,以及解读了 NVIDIA 安全报告 自动驾驶 白皮书,本文是我的一些思考和见解。自动驾驶技术的目标是为了改善道理安全、减少交通堵塞,重塑更安全、高效、包容的交通生态。在这一领域,NVI…...
真我推出首款 AI 翻译耳机,支持 32 种语言翻译
2025 年 4 月 22 日,真我手机官微宣布,其首款 AI 翻译耳机 Buds Air7 Pro 将于 4 月 23 日 16 时正式上市1。这款耳机接入了讯飞星火认知大模型 4.0 Ultra,支持中文与 32 种语言面对面翻译,以及同声传译功能。 除了 AI 翻译功能&a…...
如何简化复杂流程提升执行效率
简化复杂流程、提升执行效率的关键在于:聚焦核心目标、减少冗余环节、推动系统自动化、赋能一线决策、流程分级设计。其中,聚焦核心目标 是流程优化的第一步。流程不该为了“流程而流程”,而应服务于业务目标。Gartner在《数字化运营报告》中…...
动态规划算法:完全背包类问题
前言 现在我们考虑下面的问题: (1)小明有一个背包,背包容积为v,有m种物品,其中第i种物品的价值为val[i],体积为t[i],每样物品有无限个,请问背包内物品总价值最大为多少?…...
数据存储方式补码原码反码
1. 关于数据存储(补码、原码、反码) 有符号类型(Signed Types) 存储方式:现代计算机普遍采用 补码(Two’s Complement) 存储有符号整数。 原码:最高位为符号位(0正&…...
【AAudio】A2dp sink创建音频轨道的源码流程分析
一、AAudio概述 AAudio 是 Android 8.0(API 级别 26)引入的 C/C++ 原生音频 API,专为需要低延迟、高性能音频处理的应用设计,尤其适用于实时音频应用(如音频合成器、音乐制作工具、游戏音效等)。 1.1 主要特点 低延迟:通过减少音频数据在内核与用户空间之间的拷贝,直…...
黑马点评之Feed流技术实现关注推送与滚动分页查询
Feed流 关注推送也叫做Feed流,直译为“投喂”。为用户持续的提供“沉浸式体验”,通过无限下拉刷新获取新的信息。 Feed流(信息流)是一种常见的内容分发形式,通过动态更新的内容列表向用户展示个性化或实时信息。典型应…...
vue3+canvas裁剪框样式【前端】
目录 canvas绘制裁剪框:拖拽改变框的大小:圆圈样式:方块样式: canvas绘制裁剪框: // 绘制裁剪框 const drawCropRect (ctx: CanvasRenderingContext2D): void > {if (cropRect.value.width > 0 && crop…...
Python 设计模式:模板模式
1. 什么是模板模式? 模板模式是一种行为设计模式,它定义了一个操作的算法的骨架,而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下,重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…...
usb2.0的硬件知识(一)
一、USB2.0的硬件知识 1.1 USB2.0速率 USB 2.0协议支持3种速率:低速(Low Speed,1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps);USB Hub、USB设备,也分为低速、全速、高速三种类型。 1.2 USB2.0硬件线序组成 U…...
LangGraph(二)——QuickStart样例中的第二步
目录 1. 添加依赖2. 官网QuickStart——第二步:用工具增强聊天机器人2.1 Tavily Search2.2 简单测试Tavily Search2.3 添加带工具的ChatBot node2.4 添加tool node2.5 添加条件边2.6 可视化StateGraph2.7 构建聊天循环 参考 1. 添加依赖 LangGraph(一)——QuickStar…...
机器学习第二篇 多变量线性回归
数据集:世界幸福指数数据集中的变量有幸福指数排名、国家/地区、幸福指数得分、人均国内生产总值、健康预期寿命、自由权、社会支持、慷慨程度、清廉指数。我们选择GDP per Capita和Freedom,来预测幸福指数得分。 文件一:linear,…...
【MCP Node.js SDK 全栈进阶指南】中级篇(3):MCP高级资源设计
前言 在MCP TypeScript-SDK的初级篇中,我们介绍了资源开发的基础知识,包括静态资源与动态资源的创建、资源模板设计与参数提取,以及基本的资源列表与发现机制。随着应用规模的扩大和复杂性的提高,我们需要更加高级的资源设计方案来应对各种挑战。 本文作为中级篇的第三篇…...
PostgreSQL 常用日志
PostgreSQL 常用日志详解 PostgreSQL 提供了多种日志类型,用于监控数据库活动、排查问题和优化性能。以下是 PostgreSQL 中最常用的日志类型及其配置和使用方法。 一、主要日志类型 日志类型文件位置主要内容用途服务器日志postgresql-<日期>.log服务器运行…...
PostgreSQL认证培训推荐机构
首先来看一张2025年4月份db-engines上的数据库排行情况,前三名是雷打不动的Oracle、MySQL、Microsoft SQL Server,排名第四的就是我们今天的主角 - PostgreSQL数据库,从这张图上可以看出,PostgreSQL数据库的上升超非常明显&#x…...
2025年NISP一级题库试题
NISP一级考试只考50道单选题,难度不算大,话不多说,直接上硬菜! 1、物理销毁的方式不包括() .消磁 B.焚化炉烧毀 C.反复覆写数据 D.机器硏磨粉碎 2、信息安全应该建立贯穿信息系统的整个生命周期…...
pip install pymysql报错
python安装pymysql报错解决 【现象】 很多时候会出现安装pip包报错的问题,看过很多网上教程以及ai都是如下说法: 镜像问题pip版本问题ssh证书问题网络问题… 在遇见这些情况时,上述的各种解决方法都一一实验过但最后都是ERROR。 【解决办…...
达梦官方管理工具 SQLark 更新--不仅支持达梦、Oracle、MySQL,还新增 PostgreSQL 数据库!
SQLark 是一款面向信创应用开发者的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统,已支持达梦、Oracle、MySQL数据库;在最新的 V3.4 版本中,SQLark 新增了对 PostgreSQL 的支持,兼容 PostgreSQL…...
Windows 同步-互锁变量访问
互锁变量访问 应用程序必须同步对多个线程共享的变量的访问。 应用程序还必须确保对这些变量的作以原子方式执行(完全或根本不执行)。 对正确对齐的 32 位变量的简单读取和写入是原子作。 换句话说,你最终不会只更新变量的一部分;所有位都以…...
前端学习笔记
文章目录 前端主要内容基于脚手架创建前端工程vue的基本使用axios 路由Vue-Router路由组成嵌套路由 状态管理 vuex心得 前端主要内容 HTML、CSS JavaScript axios Vue基础语法(router、vuex、typescript) Element UI 基于脚手架创建前端工程 node.js …...
2025-04-22| Docker: --privileged参数详解
在 Docker 中,--privileged 是一个运行容器时的标志,它赋予容器特权模式,大幅提升容器对宿主机资源的访问权限。以下是 --privileged 的作用和相关细节: 作用 完全访问宿主机的设备: 容器可以访问宿主机的所有设备&am…...
Java八股 深入理解Spring的AOP 面向切面编程 底层 保姆级教程 手写例子
目录 概念 AOP 术语 1. 连接点(Jointpoint): 2. 切入点(Pointcut): 3. 通知(Advice): 4. 方面/切面(Aspect): 5. 引入ÿ…...
macOS安全隐私最佳实践分析
1. 引言 随着数字世界的不断扩展,个人和组织面临的安全与隐私威胁也日益增加。作为专业的安全合规与隐私保护研究团队,Kaamel 对 macOS 系统的安全隐私现状进行了全面分析,并提出了一系列最佳实践建议,旨在帮助用户更好地保护自己…...
WeakSet:JavaScript 中容易被忽视的“弱集合”
目录 WeakSet 详解 基本概念 创建 WeakSet WeakSet 的主要方法 WeakSet 的特性 WeakSet 的使用场景 1. 避免内存泄漏(DOM 元素管理) 2. 临时缓存系统 3. 私有属性模拟 4. 防止循环引用 与其他数据结构的对比 1. WeakSet 没有实例属性 2. We…...
Discuz!+DeepSeek:传统论坛的智能化蜕变之路
在数字化浪潮中,社区论坛作为互联网早期的产物,面临着功能单一、用户体验滞后的发展瓶颈。虎跃办公(https://www.huyueapp.com)通过Discuz!搭建的网址导航网站,在集成DeepSeek的AI能力后,成功实现了从工具导…...
vs2017中,将CMake构建目录设置在项目目录下
修改CMake构建目录位置 在Visual Studio 2017中,可以通过以下方法将CMake构建目录设置在项目目录下: 修改CMakeSettings.json文件: 在VS中生成CMakeSettings.json文件(通过点击编译平台按钮如x64-Debug或x64-Release…...
跨平台.NET 版本 使用率排名
截至2025年4月,跨平台.NET版本的安装使用率排名主要基于版本支持状态、性能优化和企业迁移趋势。以下是结合微软官方政策、行业动态及开发者行为分析的综合结论: 1. .NET 8 (LTS) 占据主导地位 支持周期:作为2023年11月发布的长期支持&…...
基于无障碍跳过广告-基于节点跳过广告
2025-04-22 一些广告的关闭是叉图标,获取到的信息也没什么特征,这种广告怎么跳过 用autojs无障碍的节点定位ui控件位置,点击...
STM32提高篇: WIFI通讯
STM32提高篇: WIFI通讯 一.WIFI通讯介绍1.WiFi的频段5G和2.4G2.WiFi的信道二.ESP32固件烧录及驱动1.一个AT指令响应的完成2.测试其他指令三.Wifi功能初始化和TCP通讯四.volatile关键字一.WIFI通讯介绍 Wi-Fi,又称“无线网路”,是Wi-Fi联盟的商标,一个基于IEEE 802.11标准的…...
资本怪兽贝莱德投资数据分析报告-独家
贝莱德概述 贝莱德集团是全球最大的资产管理公司,其管理的资产规模达到了11.6万亿美元(约合人民币84.18万亿元),这个数字相当于中国2024年GDP的62%。贝莱德通过收购李嘉诚旗下的43个全球港口资产,将在全球运营约100个港口。此外,…...
操作系统-用户级-内核级线程
一、先明确几个基本概念: 用户级线程(ULT): 完全由用户空间的线程库(如 pthread 或 green threads)管理。 操作系统内核对此一无所知。 切换线程时,不需要进入内核,效率高…...
【深度学习】LoRA:低秩适应性微调技术详解
LoRA:低秩适应性微调技术详解 文章目录 LoRA:低秩适应性微调技术详解1. 引言2. LoRA原理解析2.1 核心思想2.2 数学表达 3. LoRA实现细节3.1 适用层选择3.2 缩放因子3.3 初始化策略 4. 代码实现示例5. LoRA在实际应用中的优势5.1 内存效率5.2 训练速度5.3…...
研发效率破局之道阅读总结(3)工程优化
研发效率破局之道阅读总结(3)工程优化 Author: Once Day Date: 2025年4月22日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…...
树莓派超全系列教程文档--(40)树莓派config.txt旧版GPIO控制、超频及条件过滤器
树莓派config.txt旧版GPIO控制、超频及条件过滤器 传统GPIO控制enable_jtag_gpio 传统超频选项超频never_over_voltagedisable_auto_turbo 遗留条件过滤器The [HDMI:*] 过滤器 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 传统GPIO控制 &…...
网络基础概念(下)
网络基础概念(上)https://blog.csdn.net/Small_entreprene/article/details/147261091?sharetypeblogdetail&sharerId147261091&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link 网络传输的基本流程 局域网网络传输流…...
DES、3DES、SM4 加密算法简介
1. DES(Data Encryption Standard) 设计时间:1975 年(IBM 开发,1977 年被 NIST 采纳为美国联邦标准)。 密钥长度:64 位(实际有效 56 位 8 位校验)。 分组长度…...
如何在 Ansys Icepak AEDT 中设置多个流程以加快仿真速度?
您将学习如何进行正确的设置,以通过增加进程数量来加快仿真速度。 Ansys Icepak AEDT 需要与 Icepak Classic 不同的设置。 要设置要在 Ansys Icepak AEDT 中使用的进程数,您需要按照以下步骤作: 首先,转到“工具 - >选项 - …...
【MCP Node.js SDK 全栈进阶指南】初级篇(2):MCP基础服务器开发
引言 在上一篇文章中,我们详细介绍了MCP开发环境的搭建。本文作为MCP TypeScript-SDK系列的第二篇,将深入探讨MCP基础服务器开发的核心内容,包括服务器创建与生命周期管理、McpServer与Server的区别与选择、各种配置选项的详解,以及基本启动与调试技巧。通过本文学习,你将…...
客户端 AI 与服务器端 AI 的深度比较及实践建议?
1. 性能与延迟 客户端AI(In-Browser AI): // 使用TensorFlow.js在浏览器中进行图像分类 const model await tf.loadLayersModel(local-model/model.json);// 实时摄像头处理 const video document.getElementById(webcam); const…...
【(保姆级教程)Ubuntu24.10下部署Dify】
目录 一、下载Ubuntu二、安装Ubuntu三、在 Ubuntu 上安装 Docker Engine1、设置Docker的apt仓库2、安装 Docker 包 四、在 Ubuntu 上安装 Docker Desktop1、先决条件2、下载最新 DEB 包3、安装软件包4、启动 Docker Desktop5、检查版本 五、克隆 Dify 代码仓库六、启动 Dify1、…...
计算机组成原理---总线系统的详细概述
1.数据传输的两个方式 串行传输和并行传输:串行传输和并行传输 串行:适合的就是传输的距离比较远,这个对应的成本也是比较低的; 并行:传输的效率很高,因为分成了不同的线路,这个适合的就是短距离…...
C++静态与动态联编区别解析
在 C++ 中,静态联编(Static Binding)和动态联编(Dynamic Binding)是两种不同的函数调用绑定机制,核心区别在于确定函数调用的时机和多态性的支持。以下是详细解释: 1. 静态联编(Static Binding) 定义:在编译阶段确定函数调用与具体实现的关系。特点: 由编译器直接确…...
Linux 一些常用的命令记录
常见命令如下 查询内容 find / -name 例如:查找 libstdc.so* find / -name "libstdc.so*" 查询运行环境:/lib64/libstdc.so.6 内容是可以修改为其他的 strings /lib64/libstdc.so.6 | grep CXXABI创建软连接(创建超链接&…...
面试题-链表(1)
1.移除链表元素: 203. 移除链表元素 - 力扣(LeetCode) 删除一个链表中的相同元素。 我这里用的方法只需要将链表遍历一次,就可以删除所有节点。 前后指针法: public ListNode removeElements(ListNode head, int val) { //先判…...
【云馨AI-大模型】Dify 1.2.0:极速集成 SearXNG,畅享智能联网搜索新境界,一键脚本轻松部署SearXNG
SearXNG部署目录创建一键脚本SearXNG访问 Dify SearXNG插件安装SearXNG 插件安装进行授权工作流中进行验证工作流测试 SearXNG部署 目录创建 mkdir -p /data/yunxinai && cd /data/yunxinai 一键脚本 git clone https://gitcode.com/yunxinai/rag-sh.git 一键执行脚…...
Python 设计模式:访问者模式
1. 什么是访问者模式? 访问者模式是一种行为设计模式,它允许你在不改变对象结构的前提下,定义新的操作。通过将操作封装在访问者对象中,访问者模式使得你可以在不修改元素类的情况下,向元素类添加新的功能。 访问者模…...
dify工作流之text-2-e-sql,大模型写sql并执行
市面上有太多的text-to-sql工具,但是我这次突发灵感,为什么不做一个可以执行sql得text2sql呢。 dify的安装我不再赘述,我采用的是win10本地docker部署的方式。 mysql的安装也不再介绍,如有需要还请移步其他博主。 1.dify创建工…...