自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天草二十六

Java编程、CICD、K8S容器化部署、DevOps

  • 博客(243)
  • 资源 (19)
  • 收藏
  • 关注

原创 JPA编程,group分组配合max函数实现数据的去重并排序

有一个数据库表Like,存储的是用户推荐材料的记录, 有以下字段:一个用户可以推荐多个材料,反之,一个材料也能为多个用户推荐。在展示推荐列表的时候,需要按浏览次数排序进行排列。所以本表冗余存储了浏览次数字段, 按推荐表的常规设计,只需要用户ID+材料编号两个字段即可。有一个需求点是:不能重复展示推荐表中的材料,因为浏览次数最多的材料,当被多个用户推荐时,本表会存储多条记录。查询数据,见下图:对于材料6325868f67bf41438d62cf20ade464e8,它的浏览次数是17,被多个人推荐,所

2025-04-01 09:49:38 297

原创 Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(下)

消息在消费的时候,如果出现异常,直接抛弃,不想进入重试流程。回到最上面的流程图,其实还是无法解决消息消费失败的死循环。虽然不会进入重试, 但是在消费消息的时候,由于抛异常,又会进入消息队列。最终导致死循环。解决方法是: 对于不想要重试,而又不陷入死循环。那么就只有一个办法,使用个大大的try-catch住消息监听方法。

2025-03-25 13:51:25 1070

原创 Rabbitmq消息被消费时抛异常,进入Unacked 状态,进而导致消费者不断尝试消费(上)

在对阿里云成本分析的时候,发现SLS日志的费用暴增,由平均每月的2000元突然增至6000多。查看日志的费用明细,按应收金额降序得知,原来是某个java服务打印的jvm日志暴增。再已进入SLS查看打印的日志量,更是惊呆了。。。不仅是打印的数量多,打印的时间点是遍布整天24小时。也就是说,该日志是整天整夜地打印,像是进入了死循环。围绕着这个问题,尝试让AI给我回答原因是什么。可能是我提问水平不够,未能准确得出答案,在排查这个问题的过程中,代码是一分钟就定位出。

2025-03-25 13:47:55 1116

原创 微信小程序的业务域名配置(通过ingress网关的注解)

是依靠kong实现,本文将通过ingress网关实现。而我们的服务是部署于阿里云K8S容器,当然内核与ingress无异。找到k8s–>网络–>路由。

2025-03-20 17:05:08 506

原创 Java对接豆包等AI大模型的设计方案(六)-- 对接OpenAI的java库

请求和响应的POJO类,包括com.theokanning.openai.completion.chat.ChatMessage(请求上下文消息),com.theokanning.openai.completion.CompletionResult(正常响应体),com.theokanning.openai.OpenAiError(处理错误异常)这个jar包复用性比较高,除了多模态上下文,无法直接使用ChatMessage外。

2025-03-19 15:04:24 545

原创 Java对接豆包等AI大模型的设计方案(五)-- 编程实现(下)

接着上文,我们将通过监听者SseEventSourceListener实现SseEmitter与okhttp请求的串联。为了做到二者的关联,在SseEventSourceListener对象构造的时候,便把SseEmitter对象传递进去。实现onEvent()方法如果你也需要解析并保存data中的数据,给一个参考实现。

2025-03-19 09:15:00 854

原创 Java对接豆包等AI大模型的设计方案(四)-- 编程实现(上)

返回体是一个SseEmitter,它继承ResponseBodyEmitter,同属于spring-webmvc模块。方法send()负责传输数据给客户端方法complete()告知客户端断开连接,终止传输@ApiOperation(value = "AI问答")@ApiModel@Data@Builder@ApiModelProperty(notes = "会话ID", required = true)@NotNull(message = "会话ID必填")

2025-03-18 09:21:35 832

原创 Java对接豆包等AI大模型的设计方案(三)-- 概要设计(下)

chat作为会话聊天室,每次的一问一答则是chatItem会话明细,它们是一对多的关系。这本身没有什么难点,想着重说明的是,我们把操作本地数据库表与调用AI大模型分离开来。总是先操作chat和chatItem,把提问内容保存好,再向第三方AI大模型发起http请求。等待AI大模型返回数据后,再更新chat和chatItem的回复字段。这里会遇到一个问题:在遇到网络或账号等异常时,导致AI大模型返回报错信息,此时的chatItem会话明细会出现空回复的异常。

2025-03-18 08:37:42 373

原创 Java对接豆包等AI大模型的设计方案(二)-- 概要设计(上)

这是以kimi为示例,在实际业务中,我们会让业务方在创建会话聊天室的时候,传入提问的内容。如果用户没有开始发起提问,也就无需创建会话聊天室了。点击“开启新会话”,就是创建了一个聊天室。换句话说,一个会话聊天室,必须有一个提问。这里解释下什么是重问AI。

2025-03-17 16:02:34 526

原创 Java对接豆包等AI大模型的设计方案(一)-- 需求分析

接下来几篇文章,我试着从需求分析、概要设计到编程实现等角度,梳理并总结java语言是如何对接豆包等AI大模型。本文作为对接AI的第一篇文章,先从需求着手,讲一讲在小公司是如何使用AI大模型。不同的业务在需要问AI的时候,调用ai-assist服务,创建一个聊天会话。在聊天会话中,支持发送文字及图片,也即多模态上下文。AI回复的内容需要保存至本地数据库,留待用户回看。

2025-03-17 15:40:40 419

原创 kong搭建一套微信小程序的公司研发环境

本文通过图文的方式,把微信小程序的公司研发环境搭建整过程详细描述,使用到的api网关是kong。如果是其他网关,原理大同,见文章最开头的架构图。另外,你需要知道公司研发环境的网络相关知识,比如外网和内网的端口映射应该如何做。

2025-03-14 10:23:39 2205

原创 es查询报错Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

es查询报错:Elasticsearch exception [type=search_phase_execution_exception, reason=all shards failed]

2025-03-11 20:25:25 235

原创 JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据

课程管理界面,查询前,需要把查询元数据给出。学科列表、学段列表和分类列表,我们把它定义为查询元数据。一般的业务需求是:系统维护好多个字典,比如学科、学段等等,相当于属性库。但是,这有一个不友好的地方,字典列表数据过多,比如学段字典包括了幼儿园和大学等,而实际上,课程只有初中或高中,连小学学段也没有。这样展示的学段列表,就显得数据冗余,增加选择的干扰。修改后的需求:基于已有课程的属性,进行去重查询出学科列表等数据,也即上文提到的查询元数据。(已非原始字典)

2025-03-06 11:12:15 2257

原创 JPA编程,批量统计每个课程下的讲次数,编写自定义SQL查询语句

在查询课程列表的时候,需要统计每个课程下的讲次数。一般,我们是不建议把讲次总数冗余存储于课程里,而是采用实时查询统计的方式展示。课程与讲次的关系是一对多。本文主要是通过Jpa编程实现批量查询每个课程下的讲次数。先介绍讲次的实体,然后是持久层,最后是service层的使用。

2025-03-06 10:15:39 520

原创 微信小程序的业务域名配置(通过kong网关的pre-function配置)

本文并没有按传统的做法,把校验文件放在文件服务上,而是通过kong网关的插件,对访问接口做了一个预处理。

2025-02-10 17:38:48 241

原创 说一说mongodb组合索引的匹配规则

有一张1000多万条记录的大表,需要做归档至历史表,出现了大量慢查询。查询条件是耗时近5秒,且是全表扫描为什么没有使用到任何索引呢?请看该集合创建的索引有哪些:建立了两个组合索引userId_1_classroomId_1_isDelete_1和userId_1_classroomId_1,但是二者的重复度极高。(可以删掉userId_1_classroomId_1_isDelete_1,再新建一个单索引classroomId_1)

2025-01-13 10:52:52 1294

原创 xxl-job回调执行器,发生NPE空指针异常

问题找到了,其解决办法就简单了:让xxl-job-core和xxl-job-admin的版本保持一致。

2025-01-08 22:54:02 536

原创 微服务框架,Http异步编程中,如何保证数据的最终一致性

异步编程,要求数据的一致性,往往采取的是最终一致性。意味着在绝大多数情况下,实时回调可以保证数据更新的及时性,少数以及异常情况下,通过主动查询可以保证数据的最终一致性。本案例中,主要是回调的速度快于本地数据库的入库,所以问题是少见的,一般也很难排查。

2025-01-06 15:08:22 742

原创 json报文的序列化与反序列化问题总结(对比fastjson和jackson)

通过上面代码的运行结果可以得知,fastjson在处理带反斜杠的json字符串时,兼容性比jackson要强。

2025-01-06 11:31:33 550

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(下)

文章到此,关于商品检索的复杂查询就全部完成。还是那句话,这里的设计思路,不仅限于商品,可谓是打开业务设计的万能钥匙。对于提高程序的鲁棒性非常有帮助,微服务设计中的CQRS以及数据重构,绕开了关系型数据库的多表查询,又使用到关系型数据库的事务机制。程序设计得更加抽象且通用,而不是跟着需求打转,变动大且提测周期长。顺便说一句,除本文提及的方案外,还有一种更简的方案。去掉类目领域,只使用属性及选项即可。如果是课程领域,那么就是这么几张表搞定。

2024-12-25 11:14:45 544

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(中)

再次声明,使用属性及选项实现高效检索,不仅仅适用于商品业务模型,像课程、任务、用户等领域都适用。另外,这里说检索的高效,不单指检索速度,而是指代码的健壮性,适应业务需求的灵活与多变。这里以课程举例:课程常见的属性有科目和年级,哪天业务需求方又想要增加按课程分类过滤,常规设计是在课程基础信息表增加一个字段叫课程分类,涉及课程的增删改查统统增加该字段。(数模变更、接口变更、提测并上线)可以说,常规设计,应付这个简单的需求变化,是很容易。但是代码变更的地方多,伤害性不大,影响范围大,上线流程长。

2024-12-25 11:09:13 509

原创 Java程序设计,使用属性的选项库,轻松实现商品检索的复杂查询(上)

本文我们以某商城的商品检索为例,说一说如何使用属性及选项,实现复杂的逻辑表达式的查询。先贴图,总结出业务需求。可以通过一系列属性及选项的组合,过滤出用户想要的商品列表。

2024-12-25 11:03:22 603

原创 kong网关使用pre-function插件,改写接口的返回数据

总之,kong的这款pre-function插件可以适用于许多场景,好处是灵活配置,支持lua脚本。当然,它只返回相对固定的报文,除非你使用Lua脚本去连接数据存储中间件。不过,对于简单的一些场景够用了,这也提醒我们一点,在客户端请求接口的时候,尽量把一些标识性的字段通过http header上传上来。比如schoolId 、 userId、 deviceId、ip等等,后期在kong网关便于读取并判断是否拦截请求。

2024-12-24 13:37:20 758

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(下)

在MongoDB数据库中,currentOp是一个命令,用于返回当前数据库实例中正在执行的操作的信息。这个命令可以帮助用户诊断性能问题和识别长时间运行的操作。client:请求由哪个客户端发起。opid:操作的ID,可以通过db.killOp(opid)终止该操作。secs_running/microsecs_running:代表请求运行的时间,如果这个值特别大,需要检查请求是否合理。query/ns:可以看出是对哪个集合正在执行什么操作。lock*:与锁相关的参数。

2024-12-17 12:33:47 972

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(中)

先说一说我们的排查思路,在其他业务没有显著剧增的情况下,我们很容易定位出嫌疑最大的后端服务。于是,我们尝试在外网网关,把该服务关闭,不让外网域名访问进来。第二步,让mongodb缓口气,坐等其性能好转。预期把这个服务停掉之后,数据库就会好转。但是,事与愿违,数据库的性能指标并没有显著变化,cpu和内存还是跟过山车一样,下降了又上升,上升了又下降,循环往复。期间,为了让嫌疑服务不访问数据库,还尝试把节点数由6个降低至1个,当然也使用了重启大法。

2024-12-17 11:30:09 869

原创 记一次因误删mongodb索引,而导致集群数据库的内存飙升和锁数量剧增的生产事故(上)

本文欲梳理一次mongodb的生产事故,在不确定事故起因的情况下,我们从早上六七点,一直到中午才定位出问题。持续时间之长,不可谓不是一次惨痛的教训。首先,我们是第一时间收到了Mongodb数据库监控告警的信息,体现最明显的是cpu使用率达到了100%。(遗漏了其他信息,或者说不同于以往的指标,待下文细说)其次,客户端应用反馈说后端响应巨慢,无法访问。说明后端服务挂了,此时再使用应用重启这一大招也不好使。基于这两点,我们无法排查并定位出问题,因为此mongodb数据库集群是一批应用共用。

2024-12-17 11:25:15 315

原创 对接浦发银行支付(十四)-- 支付回调接口,未收到回调或验签出错

这一篇,我们再次梳理下支付回调的相关注意事项。另外回调报文解密后,在验签的时候,浦发外调RSA公钥内容不要写错了,具体注意事项见后文。

2024-12-15 10:49:13 109

原创 Undertow容器线程池配置及监控

选取一个java应用,看一看它的线程池,主要是工作线程worker-threads的值。默认线程池大小是如何的呢?从阿里云arms监控的线程池,可以看到,核心线程数默认是CPU核数 * 8所以线程池的最大线程数为3 * 8 = 24上图中,在12月04日 17点45分时,活跃线程数达到极大值–24,剩下的75个请求自然就在队列中等待了。在高并发的业务场景下,需要上调工作线程值。

2024-12-09 10:03:38 776

原创 对接浦发银行支付(十三)-- 接口对接前的准备,IP白名单

当浦发开放平台的API接口申请通过后,也得到了浦发商户的商户号和终端号。接下来,我们开始发起API接口,第一个接口当然是支付请求下单。这个错误的原因是,浦发银行需对请求方的IP地址进行管控,也就是要我们把出口IP登记给对方。下面就说一说,具体是有哪些IP地址登记。(难道有好几个地方?是的,避免你少走弯路,这里一一陈述出来)

2024-12-02 13:20:32 182

原创 Nexus搭建go私有仓库,加速下载go依赖包

本文我们梳理一下go依赖包的私库搭建以及使用。它只分为proxy和group两种仓库,这一点和maven仓库有所不同。

2024-11-22 15:24:19 902

原创 Java编程,配置mongoUri连接mongodb时,需对特殊字符进行转义

感叹号这样的特殊字符,它的转义方式则是反斜杠。否则java程序在解析uri的时候,会提前截取到第一个@,把前半部分错认为数据库的密码。比较是在内网环境下,不对外网访问的情况下,密码相对安全即可。有时候,为了安全性,dba会设置比较复杂的密码,含有特殊字符,比如@符号等。当使用uri方式连接mongodb时,对特殊符号,特别是@符号,进行转义。遇到特殊字符的时候多留个心眼,设置数据库密码的时候,不要太复杂了哈。但是,如果使用方式二(uri)连接,则需要对@符号转义为%40。以用户数据库为例,注意看它的密码。

2024-11-22 10:22:51 1271

原创 Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化

本文的内容比较长,既描述了阿里云对mongodb数据库的监控(着重是连接数指标),以及Mongos的使用及购买的坑,也从Java语言的 Mongo驱动程序作为切入点,分析并总结了支持哪些数据库连接池的配置项。本案例是基于生产实际中遇到的一个棘手问题,希望可以帮助到你。通过本文,让我们对连接数这个指标有更深的体会,它是一个很冷的指标,却非常致命。说它致命,是说我们在遇到程序报错的时候,极容易陷入平常思维,以为是有慢查询,或者程序QPS过高导致程序挂了。

2024-11-20 10:45:40 1311

原创 kubepi管理k8s集群,演示如何连接阿里云k8s容器

对k8s容器运维的过程中,如果是自建k8s的话,一般会安装dashboard,方便管理;如果是阿里云k8s容器,它是有提供web ui,但是它有个不便之处–需要定期登录,且缺少命令控制台。当你需要使用命令控制台时,阿里云会建议你安装kubectl本文推荐一款k8s管理工具–kubepi,它可以方便地管理多个k8s集群,不仅提供kubectl命令控制台,还有web UI。下面将介绍如何使用Kubepi连接阿里云k8s容器。

2024-11-19 09:52:38 616

原创 jenkins用户在执行scp的时候如何做免密登录

在jenkins job中执行scp的shell命令,当然不希望每次输入密码,另外处于出于安全考虑,也不建议在scp命令中指定。所以,我们需要对远程机器进行免密登录。本文遇到的问题是,在jenkins机器上执行scp已做到了免密,无需输入密码;但是,在jenkins job中执行scp命令,却报错Permission denied, please try again.

2024-11-15 17:18:14 891

原创 对接浦发银行支付(十二)-- 浦发开放平台的操作说明

填写你的app中英文及备注,没有要求。提交后,将会生成好你的APP,注意查收你的邮箱。将会收到这么一个邮件。这里的提示很nice,明确告诉了我们,下一步以及下下一步要做什么。

2024-11-15 15:23:34 104

原创 spring-data-elasticsearch 3.2.4 实现桶bucket排序去重,实现指定字段的聚合搜索

在搜索的时候,搜索条件包括creatorId列表,grade列表,subject列表等,且它们不是固定的字典,而是从文档CourseIndex的已有数据中获取。

2024-11-15 10:02:46 1013

原创 对接浦发银行支付(十一)-- 申请开放平台账号

补充申请浦发API开放平台的填写说明

2024-11-13 15:14:57 93

原创 linux多IP地址环境下,java读取本机实际的IP地址

可以看到,本机有许多IP地址,还未许多未截取。而实际的IP是192.168.8.28所以我们在读取本机IP的时候,需要去掉无效的IP。因为本机安装了docker导致生成了许多虚拟网段的IP。

2024-11-05 16:25:42 448

原创 jfrog artifactory oss社区版,不支持php composer私库

安装环境:centos操作系统,root用户。如果是mac或ubuntu等操作系统的话,会有许多安装的坑等着你。一切都是徒劳,安装折腾那么久,最后还是不能使用。这就是写本文的初衷,切勿入坑就对了。

2024-11-05 14:48:36 934

原创 本地搭建php包依赖管理工具,使用satis搭建私有composer仓库

具体应用的配置,一般都是保存在路径/etc/nginx/conf.d。下一步,我们将进入/opt/satis_manage,查看其配置。浏览器访问http://{ip} 默认80端口。根据进程号,进一步查看进程启动命令。manage 是一个可执行应用程序。端口8081对应的进程号是1342。也即satis_manage。

2024-10-31 10:39:15 717

浦发银行支付api对接

浦发银行支付api对接,使用java语言实现,包括签名,sm2方式的加解密。使用okhttp框架调用浦发银行api。适用于支付、退款以及查询支付或退款结果的接口。它还依赖于其他的几个基础jar,详细见于本jar包里的Pom.xml文件。

2024-04-21

tidb-manual-cn.pdf

豌豆荚团队的良心作品,分布式数据库,也是codis的开发团队。本附件是tidb的中文指导手册,非常全面。

2019-06-19

D+接入过程指引.pdf

DNSPod接入技术设计方案,域名解析成IP的缓存策略,可再加上app启动预加载。注意解析域名的过程一定是异步去做。

2019-06-14

Software-Transactional-Memory.pptx

多线程使用很普遍,但是存在许多问题,比如死锁,内存屏障,饥饿等。把事务模型作为一个通用的编程模型,作为解决事务的一个新思路。

2019-06-14

JVM线程状态和Thread.sleep的实现原理探究.pdf

jvm线程生命周期以及线程的状态切换,探究sleep和唤醒的原理。

2019-06-14

pinpoint中文学习(包含插件、警告).zip

pinpoint中文学习文档,比较全,介绍了基本的安装使用、插件、报警等功能。

2019-05-29

设计模式之禅的源码

设计模式 Java 源代码 秦小波著 使用通俗易懂的文字生动形象地讲解了各种设计模式,本资源主要是源码的整理,使用java语言实现。

2018-09-04

MyDac 7.0.1 ODAC 8.0.1 for Delphi 7 / 2010 Delphi XE2

MyDac 7.0.1 ODAC 8.0.1 for Delphi 7 / 2010 Delphi XE2

2015-03-13

Frontend plus 2.03 (cracked)

Frontend plus 2.03 Frontend java 反编译 eclipse

2010-12-24

PHP网上问卷调查系统,源码

PHP网上问卷调查系统,源码,建议有点Php基础的朋友使用。实现单选,复选,留言等功能。

2010-12-24

My97Datepicker日历控件

My97Datepicker日历控件java

2010-12-23

delphi代码格式化工具,插件

delphi代码格式化工具,插件,很好用的,内附使用说明,确保能够很好使用,测试平台为delphi 7

2010-10-26

传智博客--张孝祥--java培训课件以及源代码

传智博客--张孝祥--java培训课件以及源代码,希望对你有帮助,有用的话请留言哦,

2010-09-19

学习笔记之Oracle教程(免费).pdf--超详细

学习笔记之Oracle教程(免费).pdf--超详细 sql 数据库 java

2010-09-15

visual basic语言经典课件大全

visual basic语言经典课件大全,ppt格式的文件,教学使用,也可以用来替代书籍以学习编程入门使用。

2010-09-15

PHP实现的一个开源的企业门户网站

采用PHP语言来实现的一个门户网站,你可以在此基础上进行修改扩充,完善功能。

2010-09-15

电子商务网站,供开发人员二次开发

电子商务网站,供开发人员二次开发,php168开源

2010-07-09

Packet.Tracer5.2.0.0068-汉化包

Packet.Tracer5.2.0.0068-汉化包.rar 思科路由器交换机模拟软件》(Cisco packet tracer )官方5.2版+汉化包

2010-07-09

宠物商店Swing+JPA

宠物商店Swing+JPA,当前最为流行的技术。开发环境为:jdk1.6

2010-01-04

JavaScript特效大全

JavaScript特效,实用型的一些基本的js操作。

2010-01-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除