菜鸡碰到一个消息发送的需求,想不到啥好的解决方法,想请教一下大家 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
lbprivateacc
V2EX    程序员

菜鸡碰到一个消息发送的需求,想不到啥好的解决方法,想请教一下大家

  lbprivateacc 2023-05-28 23:17:43 +08:00 3840 次点击
这是一个创建于 870 天前的主题,其中的信息可能已经有所发展或是发生改变。

各位大佬们,碰到一个消息发送的需求,想请教一下: 消息体里面的字段是主表+关联表的属性字段,当这些属性字段发生变更时,要把变更的字段内容发出去。 目前的情形是:主表,关联表的字段修改,后端有差不多 10 个接口,我的方案是使用 AOP 去拦截这些接口在 before 和 after 做处理就好了。 但我上司觉得不好,后面如果其他人开发其他接口时也有修改这些属性的可能,可能会漏掉。我上司希望这个东西不会影响后面人的开发,但我比较菜,想不出来其他方法了,希望大家能指点一二

第 1 条附言    2023-05-29 11:31:35 +08:00
统一回复一下:
属性修改有业务逻辑,设计到属性状态这些的,有些属性修改要审批通过后才发消息。cannal 我看了下是支持带业务逻辑的处理,但目前时间比较紧,应该来不及去研究了,准备穷举接口先把需求完成吧。
刚入职一个月,对项目还不是很熟悉,真是鸭梨山大啊,谢谢大家的回复
25 条回复    2023-08-07 09:34:05 +08:00
k9990009
    1
k9990009  
   2023-05-29 06:28:24 +08:00 via Android
canal
xuanbg
    2
xuanbg  
   2023-05-29 08:33:41 +08:00
binlog
cloud107202
    3
cloud107202  
   2023-05-29 08:43:46 +08:00
debezium
96XL
    4
96XL  
   2023-05-29 08:49:28 +08:00
拦截这些表的 update sql ?
4lieS
    5
4lieS  
   2023-05-29 08:57:18 +08:00
canal
bugprovider
    6
bugprovider  
   2023-05-29 09:03:30 +08:00
binlog
chenPiMeiHaoChi
    7
chenPiMeiHaoChi  
   2023-05-29 09:50:43 +08:00
发哪去啊?发给其他平台的话就用 mq ,记好日志,留好证据吵架用。
siweipancc
    8
siweipancc  
   2023-05-29 10:24:49 +08:00
最近写了个类似的东西,如果是 java 跟 Hibernate 有几个类给你关注一下
`org.hibernate.integrator.spi.Integrator`,`org.hibernate.event.spi.PostUpdateEventListener`

然后可以参照一下官方的缓存实现 `org.hibernate.cache.internal.CollectionCacheInvalidator`

其他的实现 JPA 标准的提供商都应该都有这一块的逻辑,非 service 驱动的话 hook 进去即可。如果不是 JPA 标准,那么你只能自己实现了,注意`脏值`这个语义, 拦截 sql 大部分是无意义的
jiakme
    9
jiakme  
   2023-05-29 12:00:18 +08:00
flink-cdc
yinaqu
    10
yinaqu  
   2023-05-29 12:39:19 +08:00   1
兄弟,你拦截接口层,那必然会导致后续有新接口也要加拦截,甚至不是接口去修改,就是个定时任务或者其他 service 修改了字段,你或者其他开发人员忘记了有这么个更新字段业务的情况(没忘每次都要额外处理也烦)。反正你这种实现方式确实不合适。binlog 的方案我感觉相对也麻烦,思路切换到在表格映射 java 实体这一层做钩子我觉得会好很多。如果你们用的是 jpa hibernate 之类的,可以尝试直接在 entity 这一层使用 @PreUpdate 和 @PrePersist
yinaqu
    11
yinaqu  
   2023-05-29 12:46:23 +08:00
@yinaqu 如果你们用的是其它 orm 框架,比如 mybatis 之类的,就去查它有没有类似的功能,感觉这是个相当基础的功能,一般来说都有
cnoder
    12
cnoder  
   2023-05-29 12:53:23 +08:00
canal
fengpan567
    13
fengpan567  
   2023-05-29 15:15:06 +08:00
canal
Gobling     14
Gobling  
   2023-05-29 15:25:40 +08:00 via Android
你担心 deadline ,可以和上级商量。花时间去研究 canal ,这对项目来说是好事。好过你去写一个未来肯定会废弃的东西,浪费时间。
KimAndBella
    15
KimAndBella  
   2023-05-29 17:25:57 +08:00
可以考虑字节码编程,在驱动层拦截 sql ,并且抛出来,项目实现接口自定义处理方法,这样不管哪里来的 sql 都可以抓到。 以上可能描述不是很准确,不过我觉得应该可以满足你的需求。
ycvk
    16
ycvk  
   2023-05-29 17:32:11 +08:00
flink cdc
andrew2558
    17
andrew2558  
   2023-05-29 17:36:12 +08:00
你这个字段变更时,是要时实的发出去吗?如果不需要实时的话。可以用触发器呀,有更新时将修改内容插入到一个特定表内,再用程序去定时观察这张表不就可以了?
SANJI59
    18
SANJI59  
   2023-05-29 19:20:55 +08:00
用的什么 orm 框架,拦截 sql 就可以啊。
urnoob
    19
urnoob  
   2023-05-29 19:40:40 +08:00 via Android
拦 sql 会有可靠性问题。
flink debezium 之类的可以。而且实现起来也简单
lbprivateacc
    20
lbprivateacc  
OP
   2023-05-29 21:36:42 +08:00 via Android
@yinaqu 用的是 mybaties ,想过在 dao 层做,但这些字段更新,消息发送存在着业务逻辑。处理起来感觉要就放弃了
lbprivateacc
    21
lbprivateacc  
OP
   2023-05-29 21:37:50 +08:00 via Android
@Gobling 要和其他项目,没办法往后推了
lbprivateacc
    22
lbprivateacc  
OP
   2023-05-29 21:38:29 +08:00 via Android
联调,漏打了
MIUIOS
    23
MIUIOS  
   2023-05-30 09:08:00 +08:00
canal 无脑上啊 ,简简单单, 搞个 client 就行了
nanjingwuyanzu
    24
nanjingwuyanzu  
   2023-05-30 10:01:47 +08:00
直接 canal ,你用其他的方式出了问题研究的时间肯定大于等于你研究 canal 的时间了、
chachae
    25
chachae  
   2023-08-07 09:34:05 +08:00
debezium cdc ,有用 flink 的可以直接上 flink-cdc
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5794 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 27ms UTC 01:43 PVG 09:43 LAX 18:43 JFK 21:43
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86