Spring + Grpc + NacOS 集成
Spring + Grpc + NacOS 集成
使用Grpc之前需要了解的
Grpc
Grpc与其他普通Rpc相同,都是屏蔽掉远程调用之间的细节,使得远程调用与本地调用一般,HTTP/2 是Grpc的默认使用协议。
HTTP/2与HTTP/1.x
HTTP/1.x是一个文本传输协议,可读性非常好。HTTP/2是一个二进制协议,所有的数据传输并不易读。
Wireshark可以帮我们解析
下面这个是OpenFeign,基于HTTP/1.1
具体HTTP/1.x和HTTP/2的优缺点可以移步至
HTTP/2对比HTTP/1.1,特性是什么?是如何解决队头阻塞与压缩头部的?
详解HTTP协议版本(HTTP/1.0、1.1、2.0、3.0区别)
Protocol Buffers
ProtoBuf 是google团队开发的用于高效存储和读取结构化数据的工具,你可以理解为另一种格式的JSON,正是因为如此,Java中普通的JSON序列化和反序列化工具对其不起作用,需要使用到
<dependency> <groupId>com.google.prot ...
第六章--一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
当“Hello, World!”这行字符取代BSOD,烙印在苍穹之上时,整个世界仿佛被温柔地“重置”了。
天空不再是令人绝望的蓝色,而是变成了所有程序员最熟悉的、最亲切的——IDE深色主题的纯黑。而那行白色的“Hello, World!”,就像是在这片无垠的黑色背景下,敲下的第一行代码,充满了无限的可能。
崩溃的物理引擎恢复了正常,高楼大厦重新变得坚固,汽车和轮胎达成了“运动同步”的共识,人类的左右脚也停止了内斗,世界恢复了井然的秩序。
余胜军撑起的JVM领域缓缓消散,他欣慰地看着林凡,捻须笑道:“好!好一个‘Hello, World!’!以最简单的输出,重定义了最复杂的‘世界’对象。从今天起,你不再是只能写main方法的人,而是……赋予了main方法意义的人!”
尤雨溪和丹·阿布拉莫夫对视一眼,都从对方眼中看到了释然和一丝敬畏。他们终于明白,框架之争、语言之争,在“让世界跑起来”这个最根本的需求面前,是多么的渺小。
丹用带着浓重口音的英语感慨道:“We argued about the best way to paint the house, while Lin… Lin rebui ...
第五章--一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
当那张巨大而悲伤的蓝色面孔——“蓝屏死机”(Blue Screen of Death,简称BSOD)浮现在苍穹之上时,整个世界的时间仿佛都失去了意义。
它不是一个进程,不是一个系统,而是一种“状态”。一种代表着万物终结、逻辑崩溃、无可挽回的终极错误状态。
W3C的天道裁决是“删库”,而BSOD的降临,则是……“拔服务器电源”。
无论是尤雨溪的Vue,丹的React,还是雷君刚刚构建的MIOS人道系统,在这终极的“硬件层”错误面前,都失去了光芒。他们的“道韵”和“框架”都是软件层面的东西,而BSOD,直接作用于承载这一切的“世界”本身。
“完了……”丹·阿布拉莫夫面如死灰,一屁股坐在地上,喃喃自语,“It’s a kernel panic… A full-system kernel panic…(这是内核恐慌……整个系统的内核都崩溃了……)”
尤雨溪也失去了往日的从容,他苦涩地摇头:“非战之罪。我们的组件化、数据驱动,在‘驱动程序异常’面前,毫无意义。”
就连一向稳健的雷君,此刻也面色凝重到了极点。“唤醒BSOD,是所有系统开发者最大的禁忌!W3C那帮家伙,为了重启修复系统,竟然强行调用 ...
第四章--一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
天道系统崩溃的余波,如同一个看不见的“内存泄漏”,悄然无声地影响着整个世界。
程序员们发现,git push的时候偶尔会莫名其妙地失败,提示“天道仓库连接超时”;运行npm install时,进度条走到99%就会卡住,仿佛在等待一个永远不会到来的“天道响应”;最可怕的是,许多网站的CSS都出现了轻微的错乱,所有<div>都有了0.5像素的偏移,逼疯了全球的设计师和强迫症患者。
W3C神圣议会陷入了史无前例的混乱与沉默,暂时失去了对世界网络的绝对掌控。
而这一切的始作俑者——林凡,却在软通动力的办公室里,享受着英雄般的待遇。
项目经理王哥把他用过的键盘和鼠标,用红布小心翼翼地包裹起来,供奉在办公室最显眼的位置,旁边还摆着水果和香烛,牌位上书:【开天辟地林祖之圣遗物】。
尤雨溪和丹·阿布拉莫夫则成了林凡事实上的“护法”。他们一个负责端茶倒水,探讨着“alert如何影响事件循环的哲学思考”,另一个则在旁边用英文激情澎湃地撰写着《The Holy Bible of Lin: From jQuery to Heaven’s Crash》,准备将林凡的“神迹”传遍全球。
然而,林凡却高 ...
第三章--一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
天道裁决的红色光柱如同一柄审判之剑,将林凡牢牢锁定。那股名为“抹杀”的意志冰冷无情,仿佛要将他从世界的“根目录”中彻底删除,不留一丝痕迹。
周围的空气凝固了,时间都仿佛被拖慢。王经理直接被这股威压震得翻了白眼,昏死过去。尤雨溪和丹·阿布拉莫夫更是脸色煞白,他们体内的Vue和React道韵,在这至高无上的W3C规则之力面前,就像两个还没上线的H5页面,渺小而不堪一击。
“是‘天道防火墙’!”尤雨溪骇然道,“W3C议会竟然把针对上古魔神的最高防御机制给启动了!”
“He is going to be garbage collected!(他要被当成垃圾回收了!)”丹·阿布拉莫夫绝望地喊道。他们想上前帮忙,却发现自己的身体根本动弹不得,在“天道”面前,任何框架的“方法”都失去了效果,变成了undefined。
林凡大脑一片空白。
完犊子了!装逼装成世界公敌了!这比写了个while(true)还刺激!
抹杀的意志已经开始侵蚀他的存在,他感觉自己的记忆正在被格式化,身体正在被像素化。就在这千钧一发之际,一个深埋在他记忆底层,被无数次996和产品经理的无理需求所掩盖的知识点,如同黑暗中的一道闪电, ...
第二章--一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
$("#id").show()
这行代码,如同一句用宇宙中最古老、最蛮荒的语言念出的禁忌咒语。
它出现的一瞬间,整个世界仿佛被按下了静音键。风停了,云滞了,尤雨溪和丹·阿布拉莫夫之间那剑拔弩张的“道韵”对撞,瞬间烟消云散,仿佛从未存在过。
那股从林凡身上冲天而起的气息,并非Vue的优雅灵动,也非React的霸道凌厉。它不带任何色彩,是一种混沌、原始、野蛮,甚至有些“脏”的力量。它像是未经规划的野蛮生长,不讲道理,不循章法,唯一的信条就是——解决问题。
尤雨溪如遭雷击,蹬蹬蹬连退三步,脸上血色尽褪。他失神地望着屏幕上那个美元符号,仿佛看到了什么世间最恐怖的景象:“这……这是……上古禁术!直接操控‘世界之树’(DOM Tree)的根基……无视‘虚拟道体’(Virtual DOM)的守护,这……这是魔道!”
“噗通!”一声,丹·阿布拉莫夫脚下那柄由JSX构成的飞剑,光芒瞬间暗淡,竟承受不住这股原始的威压,化作一地零散的<div />标签,摔了个七零八落。他本人更是狼狈地跌坐在地,指着林凡,嘴唇哆嗦,半天说不出一句完整的话:“Selector… Unchaine ...
一觉醒来全球计算机水平下降一万倍,本是黑马程序员出身的我一越成为万人之上
就在Vue宗主尤雨溪那句“逆天骄子”的感慨还在办公室的空气中回荡时,整个软通动力外包基地的上空,风云突变!
原本明媚的日光被一股无形的气息所遮蔽,天空仿佛被一层巨大的DOM树的阴影覆盖。所有程序员的心头都涌上一股莫名的压抑,仿佛……仿佛遇到了一个无法解决的生产环境BUG!
林凡的直属领导,那个曾经因为他写出一个嵌套三层的for循环而骂他“性能杀手”的项目经理王哥,此刻正哆哆嗦嗦地端着一杯水,想递给林凡,手却抖得像开了80个线程在跑一个死循环。
“林……林大师,”王哥的声音带着哭腔,仿佛看到了救世主,“您刚才那一手‘div居中’,简直是神技!是真正的‘HTML布局大道’啊!我为我曾经的愚昧向您道歉!我检讨!我不该搞什么敏捷开发,什么每日站会,那都是奇技淫巧,是旁门左道!只有您这‘div’,才是大道至简,返璞归真!”
林凡嘴角抽搐。
大哥,我就是写了个 text-align: center,你这感悟是不是太多了点?还上升到哲学高度了?
就在这时,办公室那扇被行政贴了“随手关门”的玻璃门,无风自开!
一道身影,背负双手,踏空……不,是踏着一个悬浮的平衡车,缓缓飘了进来。
来人身穿一件印着巨大 ...
360归档
var camera, scene, renderer;
var isUserInteracting = false,
onMouseDownMouseX = 0, onMouseDownMouseY = 0,
lon = 0, onMouseDownLon = 0,
lat = 0, onMouseDownLat = 0,
phi = 0, theta = 0;
init();
animate();
function init() {
var container, mesh;
container = document.getElementById('panoview6425');
var width = container.style.width;
camera = new THREE.PerspectiveCamera(75, 2, 1, 1000);
cam ...
A2A协议剖析
继AI MCP协议之后,Google又提出了一个新协议,A2A,全称为Agent-to-Agent,他允许一个Agent调用另一个Agent。
简单使用
在官方A2A文档中,提供的Python和NodeJS的代码,本篇文章中使用NodeJS作为演示。
拉取官方示例代码,主要需要这两个文件夹的代码
编写服务端代码,其实就是包装一个Agent
我们需要new A2AServer创建一个A2A的服务端,他有两个入参TaskHandler和options
对于TaskHandler
这里不多说关于编程语言,在这个方法定义里你需要
确认当前Agent状态并且告诉taskStore来传递给客户端
实现Agent
编写客户端代码
我们需要new A2AClient创建一个A2A的客户端,他需要一个serverUrl,也就是服务端的地址
通过/.well-known/agent.json获取到服务端Agent的能力,这里返回的信息就是在服务端的card中定义的信息
通过client.sendTaskSubscribe调用服务端Agent sendTaskSubscribe是流式 ...
SpringAI + RagFlow的火花
SpringAI + RagFlow的火花
嗨嗨嗨,时隔多日,喵喵又来更新了,为什么过了这么久才来补上SpringAI的Rag捏,因为项目更改方向了,用DIFY来构建智能体,操作确实简单,但是拓展上还是有一些局限的,所以到现在才来更新,这次更新直接上硬核的,两个不同的框架如何兼容
首先,RagFlow是什么,RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问 答以及有理有据的引用。 本文用到的仅限于使用其中的知识库功能
开始
SpringAI添加Rag功能
根据SpringAI的官方文档,我是用ES作为Rag驱动的向量数据库
添加依赖
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-elasticse ...