自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

念念不忘,必有回响

微信:weihubeats。个人公众号:小奏技术,专注于技术分享

  • 博客(597)
  • 收藏
  • 关注

原创 通过MCP协议让AI实时获取天气信息,聊聊兴起的MCP协议

MCP并不是什么新颖的东西,就是一个标准协议。定义一些标准的输出,然后AI可以直接获取这些能力。让AI能基于MCP提供的能力进行自动操作,不需要人为的操作。让AI更智能。通俗点就是给AI装上手脚,大模型只是大脑使用java语言的小伙伴想要实现MCP可以使用spring-ai提供了MCP Client和MCP Server协议的封装。让我更庄重与应用的开发,不需要自己去实现底层的一些协议通信。

2025-03-29 21:00:00 806

原创 Apache Kafka 4.0正式发布,首个默认KRaft模式运行,移除单独维护Zookeeper降低复杂性

总的来说改动还挺多,最核心的改动还是默认使用KRaft模式运行。和也有一些改动,具体参考官网吧。

2025-03-20 07:45:00 1802

原创 jdk24即将直播发布,抢先看新特性

JDK24在并发编程、性能优化和安全增强方面提供了显著改进.不过有很多功能是实验性和预览功能,线上需要谨慎使用感兴趣的可以在23:00观看发布直播。

2025-03-19 09:10:29 851

原创 Dubbo服务调用JDK版本不兼容如何解决

JDK版本不兼容是Dubbo服务调用中常见的问题,特别是在跨团队协作时。解决这一问题的最简单方法是打包一个低版本的JAR包,以确保兼容性。如果不想折腾,保持团队之间JDK版本即可。

2025-02-27 08:45:00 511

原创 github如何基于workflow实现自动集成测试提升代码质量

通过docker实现自动集成测试,可以保证我们的代码质量,让我们的代码更加健壮我们也无需手动执行,不用担心有人没有执行测试,导致改动的代码有bug通过githubworkflow我们实现自动化集成测试非常简单,任何改动有了ci的检查不会像以前没有底气。至少能保证基本的功能是正常的,不会出现非常明显的bug。

2025-02-19 09:15:00 704

原创 deepseek+dify打造个人专属知识库简简单单轻松拿下(附踩坑笔记)

之前就在教大家在本地部署过deepseek蒸馏模型。今天我们再来看看如何基于deepseekdify打造个人专属知识库。

2025-02-13 23:45:00 1245

原创 DeepSeek服务器总是繁忙,试试花三分钟本地部署DeepSeek-R1蒸馏模型解决服务繁忙

本地运行的蒸馏模型还是比较容易的主要下载ollama和蒸馏模型就行。但是受限于本地机器限制,蒸馏的模型参数比较少,效果也不是特别好哈哈如果有更好的机器可以选择更多参数的蒸馏模型。

2025-02-06 10:04:30 856

原创 从来都是在controller层进行参数校验,便对吗?

目前行业内大部分的教程和规范都是在controller中进行参数校验导致大家都在controller中进行参数校验。实际这个做法是非常不合理和容易出问题的如果我们在指定项目规范的时候,我们应该规定参数校验应该在service层进行,而不是在controller层进行。

2024-12-20 22:18:27 598

原创 spring boot大家都会编写接口,但是少有人知道接口集成测试如何编写更优雅

中测试controller有多种方式。但是我觉得最好的方式还是通过进行测试不用启动服务器,测试速度快,而且可以模拟http请求,对于结果校验也提供了很多的断言机制。对于一些经常变化的业务接口写集成测试的意义不是特别大。是否需要编写集成测试还是要看接口的重要程度、项目的时间等多方面因素来决定。小伙子,刀给你了,什么时候用你自己决定啦。

2024-12-12 10:00:43 394

原创 从Netty发送消息流程分析聊聊高水位和低水位

Netty中的高低水位是通过来设置的,是一个对象,它包含两个属性low和high,分别表示低水位和高水位如果待发送数据的内存占用总量超过高水位线的时候,Netty就会将Channel的状态标记为不可写状态,并触发事件如果待发送数据的内存占用总量低于低水位线的时候,Netty会再次将Channel的状态标记为可写状态,并触发事件如果仅仅只是设置了高低水位参数,但是在写代码中没有对进行判断,那么高低水位还是不会生效高低水位主要是为了防止中的数据不断增加,最终撑爆导致OOM。

2024-11-07 04:00:00 779

原创 用了json这么久我猜你一定不知道json schema是啥

是一种用于描述 json 数据结构的语言,它可以用来定义 json 数据的类型、格式、约束等信息。本身是一个也是json数据总的来说如果需要进行json数据校验,推荐使用,它的校验结果更加简洁,使用起来更加方便在官方的对比文档中也可以看出来的功能更加全面,性能也更好,可扩展性也是非常强的同时也是目前主流的json序列化库使用的校验库。

2024-11-02 09:45:00 3256

原创 junit4用了这么久,来试试junit5中的参数化测试提高单测效率吧

参数化测试是junit5中的一个非常有用的特性,使用参数化测试()有如下好处代码更简洁:每个测试方法只需编写一次断言逻辑,减少了重复代码更易于维护:添加新的测试用例只需在 @ValueSource 中添加新的值,而不需要编写新的测试方法更好的可读性:测试用例和测试逻辑分离,使得测试意图更加清晰更好的测试报告:每个参数都作为单独的测试用例运行,在测试报告中可以清楚地看到每个用例的结果。junit5提供了非常多的新特性,我们推荐大家使用junit5来编写单元测试,更多junit5。

2024-10-22 09:45:00 816

原创 神奇的Serializable接口,为什么有时候网络传输不用实现Serializable,有时候又需要?

如果使用java原生的网络传输方式(原生序列化方式)传输java对象就需要实现接口其他的更现代化的序列化方式一般都不需要实现接口,比如jsonprotobufhessian2等等我们使用dubbo的时候默认是需要实现接口的,因为dubbo存在接口检查机制,可以通过关闭dubbo的接口检查机制来解决这个问题。

2024-09-17 20:05:08 852

原创 为什么golang不支持可重入锁

总的来说就是goalng的设计者Russ Cox认为可重入是一种错误设计,会破坏mu互斥的原语本来在原语上两个应该互斥的方法因为可重入变的不互斥了,出现需要可重入锁的场景,实际上是你的代码出现了坏味道,需要重新设计可以看到golang从设计层面就避免了很多坏代码的味道,比如不支持可重入锁,不支持循环引用等。从编译层面去规范代码,这也是golang的一大特色但是也就带来了一些开发上的不便利,你需要花费更多的重新设计你的代码,但是这也是golang的设计初衷。

2024-08-08 09:50:56 1106 1

原创 kafka集群扩容实战

线上的`Kafka`集群采用的部署方式为`KRaft`模式,3个`KRaft`+2个`broker`。`Kafka`版本`kafka_2.13-3.5.0`

2024-06-26 09:15:00 802 1

原创 RocketMQ如何添加JVM监控

总的来说java应用都支持使用prometheus官方提供的这个agent来实现JVM的监控。我们只需要修改一下脚本把agent挂载上去即可。

2024-06-24 22:39:23 687

原创 Kafka消息能正常发送,但是无法消费问题排查

如果kafka能正常发送消息,但是消费异常,一般是消费位点出现了问题,即管理消费位点的这个toipc目前来看新增了3个brokerkafka并没有自动对进行分区迁移,需要手动进行迁移所以后续出现消费相关的问题可以优先检查这个topic的情况,毕竟kafka得消费位点都依赖于这个topic。

2024-06-15 10:03:44 2833

原创 RocketMQ如何查询延时消息原始Topic

老版本的延时消息默认是存储在这个topic,直接去原始topic查询消息是查询不到的然后查询到延时消息想通过官方dashboard直接查看原始的topic也是不支持的如果我们想查看延时消息具体是哪个topic的。我们可以通过方法获取MessageExt对象,然后通过MessageExt对象获取propertiesproperties中就有原始的topic信息。

2024-06-06 09:15:00 603

原创 Docker compose 部署Grafana+Prometheus实现java应用JVM监控

本次我们使用agentgrafanaprometheus进行了JVM相关的监控。可以看出来相对来说还是比较轻量的。如果有grafanaprometheus。应用仅需接入agent即可,并且这个agent相对来说也是比较轻量。如果是一些中间件之类的监控可以使用这种方式来做监控,比如RocketMQ等比较麻烦的是grafana的dashboard有些维护没维护,需要手动去调整一些指标的key。想要完善好看的dashboard面板还是需要慢慢调整,然后报警自己也可以去慢慢添加。

2024-06-04 09:47:30 969

原创 java nio FileChannel堆内堆外数据读写全流程分析及使用(附详细流程图)

这里是小奏,觉得文章不错可以关注公众号小奏技术。

2024-05-27 09:36:49 560

原创 线上RocketMQ偶发sendDefaultImpl call timeout问题排查

首先我们可以确定的是发生是还没有发送消息就超时了导致的。发生超时主要应该是在获取topic元数据导致的那么导致超时的原因可能有哪些呢?topic第一发送消息多个线程获取topic元数据信息同步等待锁后又重新从Nameserver获取导致的超时topic第一发送消息获取topic元数据真正的网络延时导致的超时(这种情况可能比较少,因为一般RocketmQ和client都是在一个内网)JVM Full GC stop the world导致的超时。

2024-05-22 09:43:04 1701

原创 java利用jdk11和jdk15新特性零依赖优雅调用GPT-4o,附golang实现对比

这里是小奏,觉得文章不错可以关注小奏技术公众号。

2024-05-16 09:45:00 501 1

原创 spring ai很好,但我现在还不推荐你线上使用

这里是小奏,觉得文章不错可以关注公众号小奏技术

2024-04-29 09:30:00 919

原创 不仅java要接入apollo,golang我也要接入apollo

这里是weihubeats,觉得文章不错可以关注公众号。

2024-04-25 09:45:00 615

原创 idea2024.1发布,lambda多语句的内联断点,增强spring图标等新特性,你没玩过的全新版本

总的来说一些比较简单实用的功能就是上面的这些了,还有一些就是比如ai、scala、性能方面的优化等等对详细更新内容感兴趣的可以自己查看idea官方的原文总的来说体验还是挺不错的,感兴趣的小伙伴快升级试试吧。

2024-04-20 10:10:34 1291

原创 图文并茂分析Skywalking dubbo上下午传递源码

总的来说dubbo这一快的上下文传递还是很简单的。总结为如下几个步骤是否需要增强如果是则判断是Provider还是Consumer如果是Consumer则将上下文放入skywalking上下文中如果是如果是Provider则从dubbo上下文中获取Consumer的上下文恢复到skywalking上下文中如果我们看其他实现trace传递的dubbo增强也是类似的实现原理,比如Tlog,感兴趣可以去看看,这里就不分析了。

2024-04-13 18:25:32 457

原创 RocketMQ 5.x消息不丢失核心配置allAckInSyncStateSet详解

总的来说开启最多会在master宕机后15s内集群写入不可用,等异常的broker被移出后就可以继续正常写入了。实际比如有三个集群broker-abroker-bbroker-c一个集群比如broker-a在15s内不可写入也是可以接受的,因为还有两个集群可以写入,product也是有消息重试的。所以如果不开启。一条消息写入master后还没来得及同步给slave就宕机,消息丢失的风险还是太大,线上还是推荐开启。

2024-04-10 09:45:00 864

原创 从面到点俯瞰RocketMQ存储模型

RocketMQ的消息文件主要存储在commitLog,为了保证高性能的读写,commitLog采用顺序写入,文件名按偏移量命名,这样通过二分查找消息的效率非常高。由于订阅模型是基于topic的所以为了提高性能又引入了类似commitLog的索引,并不会直接存储消息,只存储了消息的物理偏移量,这样可以很方便的通过定位到commitLog为了支持按key查找,RocketMQ又引入了索引文件IndexFile,用来支持按key的查询。索引文件主要是利用hash,通过对。

2024-04-03 09:30:00 755

原创 结合idea聊聊System.getProperty和System.getenv()的区别

总的来说主要还是用的多。主要用于启动参数的获取。当然也可以通过获取到一些系统的参数比如等但是如果是利用kubernetes进行环境变量标签传递就需要额外处理,单独使用是获取不到的。

2024-03-13 09:45:00 812

原创 PostgreSQL数组查询是否存在某个值

【代码】PostgreSQL数组查询是否存在某个值。

2024-03-11 20:45:43 950

原创 图文+源码分析实现dubbo 3.x灰度(附源码)

总得来说dubbo实现流量灰度还是非常简单的,官方提供了原生的扩展我们直接使用就好。如果需要实现dubbo服务的动态标签就需要结合使用。

2024-03-07 09:30:00 1438

原创 apisix实现http流量灰度方案的演进

总的来说基于apisix实现灰度发布还是比较简单的,实现方式有多种,区别主要还是kubernetes中是多个service还是单个service相对来说多service是apisix更推荐的做法,也能更精准控制流量。但是相对于java传统的比如和dubbo这些服务发现框架来说都是单service的元数据管理不太一样所以后续要实现全链路灰度可能会有比较大的不同。

2024-03-05 09:45:00 1494

原创 你们团队是否有RocketMQ创建Topic、GID创建规范呢

早期在使用RocketMQ的时候,系统和开发人员不算多。所以topic的创建会非常随意,各种千奇百怪的topic

2024-03-02 20:27:16 492

原创 BitSet在阿里面试和RocketMQ中的应用

简单理解就是位图,类似BitMap。用来存储二进制位的类总的来说BitSet在一些特定场景使用还是非常节省内存高效的。

2024-03-02 09:45:00 300

原创 PostgreSQL解决序列(自增id)自动增长冲突

但是如果我们在插入一些数据的时候手动指定id,那么自增序列不会跟随我们手动设置的id增长。就会出现下次不设置id的时候自增到我们手动指定的id导致主键冲突bug。如果我们插入数据不指定id。自动生成的id就还是4,从而导致主键冲突。xiaozou_id_seq是序列名,xiaozou是表名。一般表的id主键我们都是设置为自增序列。如果不知道序列名可以通过如下方式查询。实际我们的id自增序列还停留在3。设置自增序列为当前id的最大值+1。现在我们手动插入数据比如。这时候我们的数据变成。

2024-02-04 16:51:16 1986 1

原创 Linux定时删除log

【代码】Linux定时删除log。

2024-02-01 17:31:23 327

原创 基于Javassist字节码增强实现本地公参传递

这里是,觉得文章不错可以关注公众号,文章首发。拒绝营销号,拒绝标题党。

2024-01-30 21:04:19 439

原创 用Go写一个小玩意-git定时push、commit

总得来说使用goland写一些工具类啥的还是很方便的,api和打包非常轻量。比如文件的读取写入只需要一行代码搞定。

2024-01-30 20:45:00 665

原创 RocketMQ源码分析之消息重试(真相竟然是延时消息)

普通消息重试默认是16次,顺序消息默认是,消息消费失败会以延时消息的方式投递到broker,超过延时消息的最大值则以2小时为重试间隔。现在提供了不同的重试策略,默认是如果broker投递失败则会在本地再次消费该消息.重试次数的元数据存储在重试次数的增加有两种发送到broker后在broker进行+1(broker重试)如果发送broker失败则在本地消费进行+1(client重试)

2024-01-27 10:15:58 770

原创 RocketMQ 5.x pop消费详解

popRebalance在broker实现,方便多语言client实现维护.更符合云原生单个客户端消费所有queue,避免单个client假死造成消息堆积避免出现因为queue不足导致的扩展consumer提升消费能力异常避免消息队列数量与consumer数量比例不均衡时导致的某些consumer承担过多的消息后续有机会再分析下pop消费时间的源码以及更多细节。

2024-01-24 20:40:11 637

空空如也

空空如也

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

TA关注的人

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