@@ -3,11 +3,16 @@ package no.nav.tiltak.okonomi
3
3
import io.ktor.server.application.*
4
4
import io.ktor.server.engine.*
5
5
import io.ktor.server.netty.*
6
+ import net.javacrumbs.shedlock.provider.jdbc.JdbcLockProvider
7
+ import no.nav.common.job.leader_election.ShedLockLeaderElectionClient
8
+ import no.nav.common.kafka.producer.feilhandtering.KafkaProducerRecordProcessor
9
+ import no.nav.common.kafka.producer.util.KafkaProducerClientBuilder
6
10
import no.nav.mulighetsrommet.brreg.BrregClient
7
11
import no.nav.mulighetsrommet.database.Database
8
12
import no.nav.mulighetsrommet.database.FlywayMigrationManager
9
13
import no.nav.mulighetsrommet.env.NaisEnv
10
14
import no.nav.mulighetsrommet.kafka.KafkaConsumerOrchestrator
15
+ import no.nav.mulighetsrommet.kafka.KafkaProducerRepositoryImpl
11
16
import no.nav.mulighetsrommet.ktor.plugins.configureMonitoring
12
17
import no.nav.mulighetsrommet.tokenprovider.CachedTokenProvider
13
18
import no.nav.tiltak.okonomi.api.configureApi
@@ -44,34 +49,39 @@ fun Application.configure(config: AppConfig) {
44
49
configureMonitoring({ db.isHealthy() })
45
50
configureHTTP()
46
51
47
- val okonomiDb = OkonomiDatabase (db)
48
-
49
- val cachedTokenProvider = CachedTokenProvider .init (config.auth.azure.audience, config.auth.azure.tokenEndpointUrl, config.auth.azure.privateJwk)
52
+ val cachedTokenProvider = CachedTokenProvider .init (
53
+ config.auth.azure.audience,
54
+ config.auth.azure.tokenEndpointUrl,
55
+ config.auth.azure.privateJwk,
56
+ )
50
57
51
58
val oebs = OebsPoApClient (
52
59
engine = config.httpClientEngine,
53
60
baseUrl = config.clients.oebsPoAp.url,
54
61
tokenProvider = cachedTokenProvider.withScope(config.clients.oebsPoAp.scope),
55
62
)
63
+
56
64
val brreg = BrregClient (config.httpClientEngine)
57
- val okonomi = OkonomiService (okonomiDb, oebs, brreg)
58
- val kafka = configureKafka(config.kafka, db, okonomi)
59
65
60
- configureApi(kafka, okonomiDb, okonomi )
66
+ val okonomiDb = OkonomiDatabase (db )
61
67
62
- monitor.subscribe(ApplicationStarted ) {
63
- kafka.enableFailedRecordProcessor()
64
- }
68
+ val okonomi = OkonomiService (
69
+ topics = config.kafka.topics,
70
+ db = okonomiDb,
71
+ oebs = oebs,
72
+ brreg = brreg,
73
+ )
65
74
66
- monitor.subscribe(ApplicationStopPreparing ) {
67
- kafka.disableFailedRecordProcessor()
68
- kafka.stopPollingTopicChanges()
75
+ val kafka = configureKafka(config.kafka, db, okonomi)
69
76
77
+ configureApi(kafka, okonomiDb, okonomi)
78
+
79
+ monitor.subscribe(ApplicationStopped ) {
70
80
db.close()
71
81
}
72
82
}
73
83
74
- fun configureKafka (
84
+ private fun Application. configureKafka (
75
85
config : KafkaConfig ,
76
86
db : Database ,
77
87
okonomi : OkonomiService ,
@@ -81,9 +91,33 @@ fun configureKafka(
81
91
okonomi = okonomi,
82
92
)
83
93
84
- return KafkaConsumerOrchestrator (
94
+ val producerClient = KafkaProducerClientBuilder .builder<ByteArray , ByteArray ?>()
95
+ .withProperties(config.producerPropertiesPreset)
96
+ .build()
97
+ val shedLockLeaderElectionClient = ShedLockLeaderElectionClient (JdbcLockProvider (db.getDatasource()))
98
+ val producerRecordProcessor = KafkaProducerRecordProcessor (
99
+ KafkaProducerRepositoryImpl (db),
100
+ producerClient,
101
+ shedLockLeaderElectionClient,
102
+ )
103
+
104
+ val kafkaConsumerOrchestrator = KafkaConsumerOrchestrator (
85
105
consumerPreset = config.consumerPropertiesPreset,
86
106
db = db,
87
107
consumers = listOf (bestilling),
88
108
)
109
+
110
+ monitor.subscribe(ApplicationStarted ) {
111
+ kafkaConsumerOrchestrator.enableFailedRecordProcessor()
112
+ producerRecordProcessor.start()
113
+ }
114
+
115
+ monitor.subscribe(ApplicationStopPreparing ) {
116
+ kafkaConsumerOrchestrator.disableFailedRecordProcessor()
117
+ kafkaConsumerOrchestrator.stopPollingTopicChanges()
118
+ producerRecordProcessor.close()
119
+ shedLockLeaderElectionClient.close()
120
+ }
121
+
122
+ return kafkaConsumerOrchestrator
89
123
}
0 commit comments