范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Kafka封装之方法参数解析器,用起来真香!

  大家好,我是Jensen。一个想和大家一起打怪升级的程序员朋友。
  咱们在写Kafka消费者的时候,有没有发现一个很麻烦的事:每次都要手动解析Kafka消息,转换成自己想要的类型,再进行业务操作,比如:/**  * 订单支付成功通知  * @Author 公众号:架构师修行录  */ @KafkaListener(topics = "oms.orderPaySuccess", groupId = "fms") public void orderPaySuccess(ConsumerRecord consumerRecord) {   	// 解析Kafka消息 		OrderPaySuccessEvent event = JSON.parseObject(consumerRecord.value(), OrderPaySuccessEvent.class);   	// TODO 完成解析成功后的业务操作 }
  对代码有洁癖的同志就比较难受了,每次解析的操作都差不多,但这又不是业务代码……于是你就想:有没有一个办法让系统能够自动解析成自己想要的参数对象呢?
  其实是有的,早在一年前,我写过一个组件,对kafka消费做了一层浅封装,也一直在工程中沿用到现在:Kafka消费者这样写,一年节省10,000行代码
  不过也发现了一些难以解决的问题,比如:共用了一个groupId,使用Java线程池来管理,这样工程会存在性能瓶颈。
  专业的事还是交给专业的"人"来做吧,用Kafka组件本身来管理不同分组消费会更靠谱。
  Spring官方也发现这个问题,并且对此提出了解决方案——spring-messaging包下的HandlerMethodArgumentResolver接口。
  Spring官方说明
  我们从官方文档中看到,Spring-kafka在2.4.2版本支持了对kafka消息进行方法参数级别转换。
  其实,spring-web包下也有这个同名接口,用于自动解析Controller方法上的参数,这块网上资料比较多我就不详细展开了,而spring-messaging包下面这个接口的非官方资料比较少,我这里给大家总结一下用法。
  HandlerMethodArgumentResolver方法参数处理器接口很简单,只有两个方法:public interface HandlerMethodArgumentResolver {     boolean supportsParameter(MethodParameter var1);      @Nullable     Object resolveArgument(MethodParameter var1, Message<?> var2) throws Exception; }
  supportsParameter方法返回是否支持参数自动解析,resolveArgument方法就是具体的解析逻辑,把MQ传递参数转换为具体类型参数。
  我们来看一下实际案例。
  首先实现HandlerMethodArgumentResolver接口,定义为一个Spring的Component:@Component public class KafkaListenerMethodArgumentResolver implements HandlerMethodArgumentResolver {      @Override     public boolean supportsParameter(@NonNull MethodParameter parameter) {       	// 默认以com.xxx开头的类,这样可以不用在在参数前加@Payload注解         return parameter.getParameterType().getName().startsWith("com.xxx") || parameter.hasParameterAnnotation(Payload.class);     }      @Override     public Object resolveArgument(@NonNull MethodParameter parameter, @NonNull Message<?> message) {         Class<?> parameterType = parameter.getParameterType();         String messageContent = (String) message.getPayload();          Object body;         try {           	// 这里定义自己的解析方法             body = JsonUtils.fromJson(messageContent, parameterType);             Objects.requireNonNull(body);         } catch (Throwable cause) {             throw new KafkaException("kafka 消息解析失败: 非法JSON字符串", cause);         } 				// 可选,定义解析后的参数校验逻辑         validate(parameter, body);         return body;     }      private void validate(MethodParameter parameter, Object target) {         for (Annotation ann : parameter.getParameterAnnotations()) {             Validated validatedAnn = AnnotationUtils.getAnnotation(ann, Validated.class);             if (Objects.nonNull(validatedAnn) || ann.annotationType().getSimpleName().startsWith("Valid")) {                 ValidationUtils.valid(target);             }         }     } }
  到这里,一个类就把参数自动解析搞定了,接下来咱们看看怎么用。/**  * 订单支付成功通知  * @Author 公众号:架构师修行录  */ @KafkaListener(topics = "oms.orderPaySuccess", groupId = "fms") public void orderPaySuccess(@Payload OrderPaySuccessEvent orderPaySuccessEvent) {   	// 已经自动解析Kafka消息为orderPaySuccessEvent参数 	   	// TODO 完成解析成功后的业务操作 }
  怎么样,代码是不是比原来简洁多了,香不香!
  如果你对技术有追求,不想一直写业务代码,不妨把项目中所有需要手动解析参数的地方,替换成自定义方法参数解析器来实现~本文作者:Jensen
  八年Java老兵,曾涉猎航空、电信、IoT、垂直电商、直播互动游戏产品研发,现就职于广州某知名电商企业,财务资金团队负责人。
  小米主题设计师、手机输入法设计师、双键五笔创始人、ProcessOn特邀讲师。
  技术公众号【架构师修行录】号主,专注于分享程序员日常/架构技术/职场干货,关注回复"职场"马上升职加薪。

基于极氪009?沃尔沃将推出首款纯电动豪华MPV,外观非常漂亮据媒体报道,沃尔沃正在研发一款纯电动MPV,基于极氪009,并将于今年晚些时候在中国推出这款新车。沃尔沃在一次媒体发布会上介绍了这款神秘的电动MPV。据报道,沃尔沃首款MPV将基于风口消失后,2023年扫地机器人负重前行2022年对于许多行业来说都是寒冬,连前几年增长势头凶猛的智能扫地机器人,也在去年遭遇滑铁卢,年销量为441。4万台,同比下跌23。8。得益于全能基站型产品的出现,拉动了均价上涨,HomePodmini会有新版推出吗?随着iOS16。3及HomePod16。3的推出,HomePodmini被隐藏了的温度及湿度感应功能终于解封,变相为HomePodmini加入新功能。不过,这款在2020年10月发苏有朋登小资CHIC开年封面遇见冬雪大片邂逅浪漫近日,苏有朋登小资CHIC杂志一月刊封面,封面大片中他身穿白色毛绒外套内搭三色拼接休闲衬衫,在雪花飘落的窗边侧身静坐,冬日氛围感十足。开阔的屋顶天台雪后的木屋庭院光影变幻的台球厅,黑丝真的显腿细吗?黑色丝袜被认为能够使腿部看起来更细,这是因为黑色具有收缩性质,能够使腿部看起来更加紧凑和连续。这种视觉效果是通过黑色丝袜的色彩和光泽来实现的,这使得观众的眼睛被吸引到腿部的整体而不2022年度爱美之人专用好物推荐清单我的生活也是头条以下都是我在2022年喜欢用的,并且个人认为非常实用和好用的一些产品。一。护肤品类本人年龄30本人皮肤特征干敏肌,鼻翼加上两侧毛孔偏粗大,脸颊角质层薄,易敏感特点小今天的中国是怎样形成的(3)之中国的普罗米修斯燧人氏有巢氏让大家睡上了安稳觉。但是,人类的生活环境仍然很恶劣。当时,人们还不懂得种植庄稼,吃的是草木结的果实。不知用火烹制食物,只能生喝禽兽之血,生吞禽兽毛肉。由于多数动物在夜间的活动王昭君一生的无奈王昭君,字嫱,名昭君,出生于西汉,与西施貂蝉杨玉环并称为中国古代四大美女,有沉鱼落雁之美。落雁指的就是王昭君,据说王昭君在辞别故乡西去的时候,坐在马上弹奏琵琶怨,天上的大雁听见王昭超过1,600万人丧生,战火延烧至全球,世界大战超强分析各国高层领导第一次世界大战(简称一次大战一战,或称欧战英语WorldWarIWWIGreatWar法语lapremireGuerreMondialelaGrandeGuerre)是当太阳熄灭后,太阳系仍有神秘微光,亮度仅相当于10只萤火虫假如你身处在一个屏蔽了所有光源的房间内,那么映入眼帘的应该只会是一片黑暗,但事实却并非如此,屏蔽了所有光源后房间内依然存在着一种非常微弱的幽光。尽管这样的幽光无法照亮整片区域,但你研究人员在实验室中使用超冷量子气体创造了弯曲的时空爱因斯坦的相对论指出,空间和时间是相互交织的。在我们的宇宙中,时空的曲率相对较小,而且是不变的。然而,来自海德堡大学的研究人员成功地创造了一个实验室实验,其中时空结构可以被操纵。研
刘亦菲佟丽娅张嘉倪比美杨洋范丞丞斗帅搜狐娱乐讯(马蓉玲文sh图)3月23日晚,刘亦菲杨洋佟丽娅范丞丞张嘉倪王菊亮相上海出席某品牌活动。刘亦菲身穿深V条纹裙,优雅大气,女王范十足。当晚,心情大好的刘亦菲,不但现场送飞吻美白利器不是牛奶,坚持补充,色斑或能绕路走如今美白的话题越来越多地被人们谈起,这跟越来越多的人追求变白变美不无关系。从十七八岁的姑娘到中年大妈,从清洁工到科学家,女人对美白的追求从未改变,可以说女人很重视自己的皮肤。但是由有大愿的人,在现实中没有大事在现实生活中,我们经常能够遇到一些有着一大愿望的人。这些人对自己的未来充满憧憬,渴望着能够成为自己理想中的样子。然而,有时候这些有大愿的人却往往在现实中遭遇到了沉重的打击,难以实现只要我们躺的够快,资本就收割不了我们当代年轻人的躺平观大家好,我是你们的朋友生活创作者mc!躺平一词已经慢慢的成为了当代年轻人在处事方面的价值观!只要我躺的够快,资本就收割不了我,只要我不努力,老板就换不了车,只要我不买房,我可以过的老天要收走一个人的福气,会给出这几种提示,别不知道文飞鱼导语人活一辈子,其实谁都想要拥有福气。然而人生的福气,其实都是跟自己的付出有关系的。有付出才会有回报,不要随便挥霍自己的福气,也不要随便透支自己的人品。有一句话说,你的福气,短短五句大实话,道尽人心,句句现实!文飞鱼导语短短五句大实话,道尽人心,句句现实!01其实你没有那么多观众,别以为自己才是人群中的焦点。莫言说,不要以为世界上的人都在关心你的事,你是不是以为人人都在盯着你,其实各人有人生无常,除了让我们坚强,也让我们欣赏到了不同的人生风景作者子墨春天,风景旖旎,耳畔鸟鸣清脆,幽静了心情入眼,是一朵花红,美丽了心境窗外,一帘幽梦,烟雨朦胧了心中诗意。时光美好,欣欣然一片清新,清清浅浅的风景里,安暖了生命,安静的时候,人活着,善待自己,就是最好的投资!文泠泠01hr人活着一辈子,什么才是最好的投资呢?那就是你要学会善待自己。善待自己的身体,善待自己的心情,善待自己的人生。学会善待自己,让自己活得开心幸福,让自己保持健康,别为难自牙之殇谨以此文纪念我的母亲,纪念天下的母亲!我和母亲作者段兆宏人的牙齿,小而最硬的骨头。在嘴里站岗值班,服务人的终生。主要功能是切咬咀嚼,也关乎说话和容颜。牙无恙者往往忽视它的存在,牙疾春天的榆钱今天本想早点儿就睡,突然接到邻居大姐的电话,说她同事家里种了一棵榆钱树,给她摘了两包,她要现在给我送来一包,心里就不由的想到了这首诗踏破铁鞋无觅处,得来全不费工夫。真是感谢她。要不杰克奥特曼扮演者团时朗去世,网友一定是回到M78星云了今(24)日,雷欧奥特曼演员真夏龙发布讣告,在归来的奥特曼饰演杰克奥特曼人间体乡秀树的团时朗去世。此外,事务所发布讣告称团时朗于3月22日凌晨因肺癌去世,享年74岁。据悉,团时朗早