@@ -15,7 +15,7 @@ import {
15
15
handleTopic as handleSubjectTopicEvent ,
16
16
} from '@app/event/subject' ;
17
17
import { handle as handleTimelineEvent } from '@app/event/timeline' ;
18
- import type { Payload } from '@app/event/type' ;
18
+ import type { KafkaMessage , Payload } from '@app/event/type' ;
19
19
import { handle as handleUserEvent , handleFriend as handleFriendEvent } from '@app/event/user' ;
20
20
import { newConsumer } from '@app/lib/kafka.ts' ;
21
21
import { logger } from '@app/lib/logger' ;
@@ -43,7 +43,7 @@ const TOPICS = [
43
43
'debezium.chii.bangumi.chii_subject_revisions' ,
44
44
] ;
45
45
46
- type Handler = ( topic : string , key : string , value : string ) => Promise < void > ;
46
+ type Handler = ( msg : KafkaMessage ) => Promise < void > ;
47
47
48
48
const binlogHandlers : Record < string , Handler | Handler [ ] > = {
49
49
chii_blog_entry : handleBlogEvent ,
@@ -63,8 +63,8 @@ const binlogHandlers: Record<string, Handler | Handler[]> = {
63
63
chii_subject_revisions : handleSubjectDate ,
64
64
} ;
65
65
66
- async function onBinlogMessage ( topic : string , key : string , value : string ) {
67
- const payload = JSON . parse ( value ) as Payload ;
66
+ async function onBinlogMessage ( msg : KafkaMessage ) {
67
+ const payload = JSON . parse ( msg . value ) as Payload ;
68
68
const handler = binlogHandlers [ payload . source . table ] ;
69
69
if ( ! handler ) {
70
70
return ;
@@ -74,14 +74,14 @@ async function onBinlogMessage(topic: string, key: string, value: string) {
74
74
for ( const h of handler ) {
75
75
// catch on each handler to it doesn't get swallowed by Promise.all.
76
76
ts . push (
77
- h ( topic , key , value ) . catch ( ( error ) => {
77
+ h ( msg ) . catch ( ( error ) => {
78
78
logger . error ( 'failed to handle event from %s: %o' , payload . source . table , error ) ;
79
79
} ) ,
80
80
) ;
81
81
}
82
82
await Promise . all ( ts ) ;
83
83
} else {
84
- await handler ( topic , key , value ) . catch ( ( error ) => {
84
+ await handler ( msg ) . catch ( ( error ) => {
85
85
logger . error ( 'failed to handle event from %s: %o' , payload . source . table , error ) ;
86
86
} ) ;
87
87
}
@@ -91,13 +91,13 @@ const serviceHandlers: Record<string, Handler> = {
91
91
timeline : handleTimelineMessage ,
92
92
} ;
93
93
94
- async function onServiceMessage ( topic : string , key : string , value : string ) {
95
- const handler = serviceHandlers [ topic ] ;
94
+ async function onServiceMessage ( msg : KafkaMessage ) {
95
+ const handler = serviceHandlers [ msg . topic ] ;
96
96
if ( ! handler ) {
97
97
return ;
98
98
}
99
- await handler ( topic , key , value ) . catch ( ( error ) => {
100
- logger . error ( 'failed to handle event from %s: %o' , topic , error ) ;
99
+ await handler ( msg ) . catch ( ( error ) => {
100
+ logger . error ( 'failed to handle event from %s: %o' , msg . topic , error ) ;
101
101
} ) ;
102
102
}
103
103
@@ -119,9 +119,17 @@ async function main() {
119
119
}
120
120
try {
121
121
if ( topic . startsWith ( 'debezium.' ) ) {
122
- await onBinlogMessage ( topic , message . key . toString ( ) , message . value . toString ( ) ) ;
122
+ await onBinlogMessage ( {
123
+ topic : topic ,
124
+ key : message . key . toString ( ) ,
125
+ value : message . value . toString ( ) ,
126
+ } ) ;
123
127
} else {
124
- await onServiceMessage ( topic , message . key . toString ( ) , message . value . toString ( ) ) ;
128
+ await onServiceMessage ( {
129
+ topic : topic ,
130
+ key : message . key . toString ( ) ,
131
+ value : message . value . toString ( ) ,
132
+ } ) ;
125
133
}
126
134
} catch ( error ) {
127
135
logger . error ( error , `error processing message ${ message . key . toString ( ) } ` ) ;
0 commit comments