对接第三方系统总卡在打印上?我用一套打印服务搞定所有厂商联调

【数据集成与采集】Flink CDC 中间件 3.7.0 最新源码解析 表已经进入纯 binlog 阶段,直接放过,说明它的所有 chunk 都读完了,位置也过了最大的 high watermark。做法是两个 compat 模块,flink-cdc-flink1-compat 和 flink-cdc-flink2-compat,提供同包名同类名的适配层,比如 AbstractStreamOperatorAdapter、RuntimeContextAdapter、StatefulSinkWriterAdapter,编译时按 profile 只挂一个,上层代码不用感知版本差异。 阅读详情

做 To B 行业软件这么多年,最磨人的从来不是内部功能开发,是和第三方厂商做系统对接。而打印模块,永远是联调路上绕不开的坑。

早年做医院 HIS 项目,一套系统要对接体检系统、LIS 检验系统、医保结算平台、药房进销存,每家厂商技术栈都不一样,每次对接打印都要扒层皮。对方不懂 FastReport、调不通打印机驱动、打出来的格式和主系统对不上,来回联调少则三五天,多则一周,纯纯的无效沟通。

直到把 FastPrint Agent 做成统一打印出口,作为公共服务开放给所有第三方厂商调用,对接效率直接翻倍,还彻底解决了格式不统一、问题扯皮、升级不同步的老毛病。


一、第三方打印对接的 5 个经典死穴,做过集成的都懂

1. 技术栈五花八门,联调周期直接拉满

早年做医院 HIS 项目,整套信息化不是一家厂商做下来的:HIS 主系统、LIS 检验、体检系统、医保结算、药房进销存,各是各的厂商、各有各的技术栈,连打印方案都各自为政。有的用 FastReport,有的用 QuickReport,还有的直接调原生 TPrinter,模板格式、驱动调用、纸张设置全不统一。

最头疼的就是跨系统调用打印:收费处要打检验报告,得让 LIS 厂商把打印代码移植到 HIS 里;护士站要打药房摆药单,得专门让药房系统开打印接口。对方不懂我们的报表控件,我们摸不清对方的模板逻辑,来回联调少则三五天,多则一周,打出来的格式还经常对不上,纯纯的无效沟通。更麻烦的是模板一改,所有调用过的系统都要同步更新,漏一个地方就是新旧格式混用,客户第一个找的还是我们主系统厂商。

2. 格式各自为战,甲方客户第一个不满意

同一张收费单据,主系统打出来是一个样,第三方系统打出来是另一个样:字体大小不一样、行距不一样、二维码位置偏了、抬头落款不对。

甲方客户不认这个:都是医院的系统,打出来的单子怎么能不一样?最后锅全甩到主系统厂商头上,明明是第三方的打印逻辑,我们还要跟着背锅改格式。

3. 出问题互相甩锅,排查半天定不了责

客户说 “刚才有张单子没打出来”,第三方说数据已经发了,是打印这边有问题;我们查本地日志没收到请求,说是对方没发过来。来回扯皮,半天查不出根因,客户那边还一直在催。

没有统一的日志入口,责任边界模糊,最后往往是两边各打五十大板,费时又费力。

4. 模板升级不同步,版本越对越乱

客户要改个单据抬头、加个收款二维码,按理说改一次模板就行。但因为每个第三方系统里都嵌了一套自己的打印逻辑,你得通知所有厂商同步修改。

有的厂商排期慢、不想改,有的改完忘了发版,最后系统里同时存在好几个版本的单据,越用越乱,客户体验极差。

5. 开放边界难把控,安全风险难拿捏

为了对接打印,要不要给第三方开放数据库?要不要给系统权限?开放多了担心数据安全,开放少了对方打不了单。很多项目为了省事直接给高权限,埋下了不小的安全隐患。


二、换个思路:把打印服务共享出去,只传数据不碰业务

踩了多年对接的坑之后思路一下通了:打印本质是一个公共基础能力,完全没必要每家厂商各做一套。

正确的做法是:把 FastPrint Agent 部署在客户本地,作为全局统一的打印网关,所有第三方厂商都通过标准 HTTP JSON 接口调用打印。

第三方厂商不用关心打印机驱动、不用管模板怎么设计、不用引入任何打印控件,只需要按照文档组装好业务数据,发一个 POST 请求就完事。打印模板、打印机映射、异常重试、日志留痕,全部统一在打印服务里管控,第三方完全不用操心。


三、这套方案的真实价值,对接过的人都懂有多爽

1. 对接效率指数级提升:从一周到半天

不管对方是什么技术栈,只要能发 HTTP 请求就能对接。我们只需要提供一份接口文档和字段说明,对方开发照着传 JSON 就行,不用沟通打印控件、不用远程调驱动,正常半天就能跑通完整打印流程,联调时间直接砍掉 80%。

2. 格式 100% 统一,甲方不用再挑格式

所有第三方调用的都是同一套模板,抬头、字体、字段位置、二维码大小完全一致。不管是门诊收费、体检缴费还是药房取药单,打出来的单据都是统一标准,甲方客户再也不会因为格式问题投诉。

3. 权责清晰,再也不用扯皮甩锅

所有打印请求全链路留痕,什么时候发的、打印成功还是失败、失败原因是缺纸还是离线,日志里一清二楚。

客户反馈漏单,查一下日志就知道:是第三方没发请求、数据格式错了,还是打印机硬件问题,责任边界一目了然,不用来回甩锅,排查问题从半天缩到一分钟。

4. 安全可控,只开放打印能力

第三方只能调用打印接口,接触不到业务数据库、碰不到系统内部逻辑,数据安全边界清晰。

5. 复用现有能力,零额外开发投入

不用为了第三方对接专门开发打印模块,直接复用已有的 FastPrint Agent 能力,模板、驱动、队列、异常处理都是现成的。相当于一套打印能力,内部系统和第三方厂商共用,投入产出比极高。


写在最后

做 To B 软件,系统对接是绕不开的事,而打印往往是对接里最琐碎、最容易出矛盾的环节。

把打印能力抽成独立服务共享出去,看似多了一层,实则把对接复杂度从 N*M 降到了 N+M:不管对接多少家厂商,打印层面只需要维护一套服务、一套模板,既提升了对接效率,又保证了格式统一,还减少了扯皮甩锅。

不管是医院 HIS 对接第三方医技系统、餐饮收银对接外卖会员平台,还是零售 ERP 对接仓储系统,只要涉及跨厂商打印对接,这套方案都能用极低的成本落地。

如果你也经常和第三方系统对接、被打印联调折腾、总因为格式问题背锅,不妨试试这套共享打印方案。附带第三方对接规范文档,正常半天就能完成对接。

项目地址:
Github - https://github.com/mingjiesoft/FastPrintAgent

Gitee -   https://gitee.com/mingjiesoft/FastPrintAgent

 

【数据集成与采集】 Canal 中间件最新源码解析 不每次 ack 都写,是因为 ZK 的写要过 quorum,比写本地内存贵几个数量级,ack 频率一高就把 ZK 打成瓶颈,而且这些写全是同一个 znode 的覆盖,纯浪费。是纯正则,用 Perl5Matcher 匹配,只认 CREATE、DROP、ALTER、TRUNCATE TABLE,RENAME TABLE,CREATE INDEX、DROP INDEX,输出 schema、table、eventType、原表名。如果按分区拆过,投递前会先按分区合并消息,再异步发送,因为单分区内的顺序已经保证了。 阅读详情

相关推荐

CAS5和CAS6自定义异常提示消息

CAS自定义异常提示消息

weixin_42949219的博客 979

高校学生服务平台建设:轻量中台与微服务架构下的全天候自助服务实践

在高校数字化转型的背景下,微服务架构因其灵活扩展、故障隔离等特点,成为构建复杂业务系统的热门选择。而数据打通则是实现跨部门协同、避免信息孤岛的关键前置条件,统一身份认证更是保障多系统安全交互的基石。本文从这些基础技术概念出发,结合校园学生服务平台的实际建设过程,阐述如何通过轻量中台与场景微服务相结合的方式,将分散的教务、后勤、财务等服务整合为全天候自助服务。内容涵盖自助打印、智能报修、无人值守服务区等高频场景的落地细节,以及数据清洗、终端选型、支付安全合规等工程实践中的避坑指南。文章既讨论微服务架构在高校环

weixin_31236101的博客 234

机器学习西瓜书期末复习(2022HENU)

期末复习之机器学习 文章目录期末复习之机器学习第一章 绪论 第一章 绪论 机器学习的定义 机器学习致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。 根据训练数据是否拥有标记信息,将学习任务分为监督学习和无监督学习。 监督学习 :分类和回归 线性回归、对数几率回归、决策树、支持向量机、贝叶斯分类器、神经网络 无监督学习:聚类 聚类算法: 原型聚类:(k均值,学习向量量化,高斯混合聚类);密度聚类(DBSVAN);层次聚类(AGNES)。降维。话题分析。图分

qq_46561559的博客 2万+

嵌入式级SDR开发板P201Mini:小尺寸大作为,从入门到实战

软件无线电(SDR)正从桌面实验设备走向嵌入式系统,其核心在于将射频前端与数字信号处理集成到紧凑模块中。通过高度集成的射频收发芯片和紧凑PCB布局,SDR模块可实现小尺寸与低功耗,降低了开发者进入射频领域的门槛。在嵌入式Linux环境下,配合GNU Radio等工具链,开发者可快速构建频谱监测、信号识别与数据采集系统。文章以一款85×50mm的嵌入式SDR开发板为例,剖析其硬件架构、软件栈配置、性能优化及典型应用,并分享实际排查经验,帮助读者将SDR技术落地到便携设备与行业终端中。

weixin_34146805的博客 391

森林冰火人html源码,森林冰火人单人版(源码)

【实例简介】java小游戏——森林冰火人,单人游戏, 实现人物行走,跳跃,吃水晶,具有计时功能,积分功能,倒计时结束游戏失败。【实例截图】【核心代码】森林冰火人单人版├── bin│ ├── game│ │ ├── Help.class│ │ ├── Logon.class│ │ ├── Main.class│ │ ├── Mykey.class│ │ ...

weixin_42507981的博客 6197

AD元件库构建及维护之——DbLib公共元件库的使用教程

AD元件库构建及维护之——DbLib元件库的使用教程

qq_43105486的博客 2万+

第九章 工具3-内置中间件

本章介绍LangChain中剩余的内置中间件,涵盖能力扩展、输出质量、测试开发及文件搜索四大类。能力扩展类包括:TodoListMiddleware实现任务拆解与进度跟踪;FilesystemMiddleware提供虚拟文件系统与上下文卸载,支持持久化与安全执行;SubAgentMiddleware实现子任务委派,缓解上下文膨胀;ShellToolMiddleware赋予持久化Shell会话,结合Docker等策略保障安全。输出质量方面,RubricMiddleware通过自我评估迭代优化结果。测试开发使用

lichao201005的专栏 312

RK3588 ENV 环境配置之 fw_printenv

RK3588 ENV环境配置指南 本文详细介绍了在RK3588平台上配置ENV环境变量的完整流程。首先需要在parameter分区表中划分env分区,然后在U-Boot中配置MMC偏移地址。接着编译fw_printenv工具并部署到目标设备,配置fw_env.config文件指定存储位置。重点解决了内核中读写ENV时遇到的CRC校验问题,通过U-Boot的saveenv命令初始化环境变量存储区域。最后展示了如何使用fw_printenv/fw_setenv工具在内核中读写ENV变量,并建议将配置集成到根文件

501846585_QQAndroid_java 1032

第八章 中间件2——内置中间件

第七章介绍中间件的核心作用,涵盖容错、成本控制、安全合规与上下文管理四大类。内置中间件如ToolErrorMiddleware和ToolRetryMiddleware实现异常捕获与自动重试;ModelFallbackMiddleware应对主模型故障;ModelCallLimitMiddleware防止无限循环;PIIMiddleware与HumanInTheLoopMiddleware保障数据安全与人工审批;SummarizationMiddleware压缩长对话上下文,LLMToolSelectorMi

lichao201005的专栏 321

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

XiaoqiangClub的博客 1万+

Claude Code 错误解决方案 使用策略拒绝 Usage Policy refusal

摘要:本文分析了Claude Code API请求被拒绝的问题,当违反Usage Policy时会显示错误提示。根因包括请求内容违规、模型敏感度差异或历史消息影响。解决方案包括修改请求措辞、切换至Sonnet 4.5模型或开启新会话。文章详细追踪了错误链路,提供了核心代码分析,并给出验证方法和最佳实践建议,帮助用户避免触发API拒绝机制。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 973

Java 字节,阿里,滴滴面试 31 题全解析:基础 / 框架 / 事务 / 中间件 / 数据库缓存 / 高并发,每题都给你「考点 + 答案 + 追问」

参考答案int corePoolSize, // 1 核心线程数(常驻,allowCoreThreadTimeOut 可回收)int maximumPoolSize, // 2 最大线程数long keepAliveTime, // 3 非核心线程空闲存活时间TimeUnit unit, // 4 时间单位BlockingQueue<Runnable> workQueue, // 5 任务队列ThreadFactory threadFactory, // 6 线程工厂(一定要自定义,方便排查)

qq_36021478的博客 690

利用GAT(图论分析工具箱)构建并分析大脑结构协变网络学习笔记

前言 前面我学习了利用DTI构建白质纤维脑网络,并采用GRETNA计算了小世界网络属性。阅读文献发现可以利用灰质体积或皮层指标(皮层厚度、折叠指数、沟深)等构建结构协变网络再进行网络拓扑属性的计算。因此,我采用前面提取的灰质体积和皮质数据进行了结构协变网络分析,特此写下笔记以便后面的学习。 一、数据准备 二、构建结构协变网络 三、全局属性的统计分析 四、局部属性的统计分析 五、网络攻击分析 六、度的分布 ..................

weixin_52073820的博客 7496

LLM应用的标准开发框架LangChain(八)- 中间件

钩子是框架或系统在某些关键执行点暴露的扩展接口。开发者可以“挂上”自己的逻辑,在那些点上插入、修改或替换行为,而无需改变主流程代码。就像在流水线上某个环节设置了一个“检查点”或“插入器”。

new9232的博客 287

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

通信中间件

简单来说:通信中间件就是位于应用程序和底层通信机制之间的一层软件,它负责帮助不同程序之间交换数据,并处理通信过程中大量复杂的问题。举个例子。假设你现在有两个程序:雷达数据采集程序雷达数据显示程序A 需要把采集到的数据发送给 B。程序 A操作系统网络协议栈| 网络操作系统网络协议栈程序 B但是,这里面有很多事情需要自己处理:数据如何序列化?接收端如何知道数据是什么类型?数据丢失怎么办?接收端暂时不在线怎么办?多个接收端如何管理?如何实现消息订阅?如何管理数据发送频率?

weixin_51883798的博客 137

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DeepAgents框架TodoListMiddleware(任务列表中间件)

当面对多步骤、长周期的复杂任务时,Agent 会自动生成一个 TODO 列表,并在执行过程中逐步更新任务状态(如:待办、进行中、已完成)。这能有效防止 Agent 在长上下文中“迷失方向”或遗漏步骤。在 LangChain 的 DeepAgents 框架中,TodoListMiddleware(任务列表中间件)是一个非常强大的组件。它的主要作用是赋予 Agent 动态规划和追踪复杂任务的能力。

qq_42092076的博客 460

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

16_MySQL 运维监控与管理工具 —— MySQL Enterprise Monitor / ProxySQL / 中间件(对标 EMCC)

16_MySQL 运维监控与管理工具 —— MySQL Enterprise Monitor / ProxySQL / 中间件(对标 EMCC) 系列定位 :《MySQL 数据库全栈运维实战系列》第 16 篇,与《Oracle 数据库全栈运维实战系列(VMware 版)》同构对标(Oracle 16…

dk843108982的博客 496

Agent/RAG开发:如何判断处理逻辑是封装在Tool工具里还是封装在Middleware中间件里

在LangChain 1.0中,Tool与Middleware的核心区别在于:是否由LLM决策调用。若需根据上下文判断“做不做”(如搜索、计算),且参数来自用户自然语言,则用Tool;若为固定流程控制(如日志、鉴权、限流),参数来自系统上下文,且必须执行,则用Middleware。前者支持0%~100%调用概率,后者100%触发,且可直接操作AgentState。通过三问法(谁决定?参数来源?失败处理?)可精准选择封装方式。

小匠的Blog 348

Gin 中间件机制详解:从洋葱模型到 JWT 身份认证

深入解析 Gin 中间件的定义、执行流程及底层原理,重点讲解 c.Next()、c.Abort()、HandlerChain 和 Context 索引机制,并结合 JWT 身份认证实战,理解中间件在 Go 后端工程化开发中的应用。

2402_88969947的博客 259

第七章 中间件

中间件为Agent核心循环提供钩子机制,分为节点式与包裹式。节点式钩子在固定节点执行,适用于日志、校验等一次性操作;包裹式钩子则包裹模型或工具调用,可控制执行流程,实现重试、请求修改等功能。通过ModelRequest和ToolCallRequest,可安全修改调用参数、路由不同角色请求,提升Agent的灵活性与可控性。

lichao201005的专栏 200

AI分布式Token中转站网关底层实现-东方仙盟

在终端优先同步架构下,所有终端智能体请求不再直连上游 MaaS 平台(千帆、百炼、DeepSeek 等),全部经由分布式 Token 中转站网关统一中继。网关承担虚拟客户密钥签发、上游子账号路由、前置内容安全审计、事务路由调度、可控网络震荡多上游链路容灾、SSE 流式透传、用量记账、封禁熔断、原始 IP 封包签名溯源等核心职责。本文基于 Go 实现分布式网关核心底座,复用架构原有无状态 Token 穿透、事务 ID 幂等、链路探活、多节点中继能力;区分两层密钥体系:面向终端客户的虚拟 Key。

cybersnow精通 28 门计算机语言,凭借其超凡的技术能力,成功开发过上万个应用,广泛涉及政府、商业、个人等众多领域,甚至在检察院、环保局、公安局等专业场景中也大放异彩。不仅熟练掌握单片机和物联网开发,在软件架构设计方面更是独树一帜,自创了跨平台软件 232

集中式与分布式怎么选:从订单读写看 KingbaseES 的架构边界

以订单系统为例,一笔付款会扣账户余额、写一条流水、更新订单状态;月末报表则可能按日期统计所有租户的订单。前者要求几项变更一起提交,后者关心查询会覆盖多大范围。讨论集中式与分布式,先把读写请求分开,比先数数据库节点更容易看清问题。KingbaseES 核心数据库是集中式关系数据库。KES RAC 和 KES TDC 也都可以部署为多节点形态,但它们的数据组织方式并不相同。

todoitbo的博客 1万+

编队系列(二)|固定翼如何依靠邻居信息保持队形?一致性控制、通信拓扑与分布式仿真实现,附仿真代码

一致性编队将通信关系写入邻接矩阵和拉普拉斯矩阵,各机根据本机与邻居的协同变量误差生成局部修正量。普通位置一致性会使成员趋向同一点;固定翼编队需要对带槽位偏置的虚拟参考点、航迹角、速度或路径参数执行一致性,再由路径跟踪和单机制导层生成可飞参考。本文例程对二维虚拟参考点坐标进行一致性,并将路径速度、路径收敛速度和一致性速度组合为期望运动,再复用 LQR 与姿态控制接口。该结构适合验证静态环形拓扑下的多机编队,但其收敛与安全性仍受消息有效性、通信时延、拓扑变化、速度饱和、转弯曲率和机间避碰约束影响。

2302_80148937的博客 288

分布式设备列表拿到了,数据通道选错照样传不过去

分布式协作的设计顺序应该是:先确定数据的一致性语义(状态最终一致 vs 操作恰好一次),再选通道(DDO / KV / RPC / 文件),最后把标识和内容分开。离线期间手机加了三个附件,平板重连后 DDO 会把最终的字段列表对齐,中间某一条“附件关联”的副作用如果涉及独立写入,不会因为 DDO 对齐而自动补执行。的 RPC 通道,这四条路解决的是不同的问题。的场景(扣库存、审批、附件关联),DDO 只能承载最终状态,操作序列需要应用层自己的 outbox 和确认水位来兜底。

2602_97267507的博客 377

分布式详解

分布式系统由多台独立节点通过网络协作,对外提供统一服务。其核心挑战在于部分失败、无全局时钟与网络不可靠。为应对这些难题,系统需在不可靠环境中保证协同正确性。分布式主要解决高吞吐、高可用、业务拆分与数据扩展问题。根据CAP定理,系统需在一致性(C)、可用性(A)与分区容错(P)中取舍,多数互联网应用选择AP,遵循BASE理论:基本可用、软状态、最终一致。分布式ID常用雪花算法,兼顾有序性与唯一性。

m0_50953782的博客 116

智能家居全国交付中随需配套的分布式节点架构设计与实现:需求驱动下的交付半径扩展

平台在目标城市筛选交付工程师,按技能标签、交付质量、准时率、配合度、主体状态进行认证。需求驱动的分布式节点架构把交付半径与业务半径同步扩展:B端客户业务覆盖到何处,平台在何处按统一标准筛选认证节点,规则先行,节点可替换,平台兜底。平台不定义产品,不创造流量,不直接服务C端使用端,只做全国交付基础设施。平台在目标城市筛选交付工程师,按技能标签、交付质量、准时率、配合度、主体状态进行认证。质量指标可观测:业务覆盖映射准确率、节点认证通过率、分级分布、一次交付成功率、返工率、异常闭环时长、节点替换响应时长。

weixin_43432501的博客 428
上一篇: 维护老系统多年,我靠一套本地打印服务砍掉了 80% 的打印运维量
下一篇: 做了多年桌面打印,我为啥非要把它抽成 HTTP 本地服务
StevenSurpass
博客等级 码龄3年 16粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值