Migrere fra AVRO
Denne guiden er for produsenter som fortsatt sender varsler på de gamle Avro-topicene. Kort fortalt: ett felles topic i stedet for flere, json i stedet for Avro, og to meldingstyper i stedet for fire. Skal du sette opp varsler for første gang, trenger du ikke denne guiden.
Produsenter trenger kun å forholde seg til ett topic for å opprette og inaktivere varsler. Opprett pr i github-repository.
Buildere og Avro
Section titled “Buildere og Avro”Vi bruker ikke lenger avro for å validere schema. Varsel-eventer sendes som json-string, med varsel-id som nøkkel.
Endringer i meldingene
Section titled “Endringer i meldingene”Meldingstyper
Section titled “Meldingstyper”Tidligere har det vært fire meldingstyper (beskjed, oppgave, innboks, done). Disse er nå slått sammen til to objekter: opprett og inaktiver. Varseltypen spesifiseres i opprett-eventet.
Endring av feltnavn
Section titled “Endring av feltnavn”eventId->varselIdsikkerhetsnivaa->sensitivitet(3 -> substantial, 4 -> high)synligFremTil->aktivFremTilfodselsnummer->ident
Deprekerte felter
Section titled “Deprekerte felter”grupperingsId og tidspunkt er fjernet.
Eksempel
Section titled “Eksempel”Et system sender varsler til brukere til gammelt topic med avro, og skal migreres.
Varslene har:
- type oppgave
- sikkerhetsnivå 4
- lenke til
https://www.nav.no - frist 14 dager etter oppretting
- teksten “Dette er et oppgave-varsel”
- ekstern varsling på sms med teksten “Dette er en sms om oppgave”
Gammelt oppsett med Avro-builder
Section titled “Gammelt oppsett med Avro-builder”val gammeltOppgaveTopic = "min-side.aapen-brukernotifikasjon-oppgave-v1"
val kafkaProps = Properties().apply { put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer::class.java) put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer::class.java) // ...}
val kafkaProducer = KafkaProducer<NokkelInput, OppgaveInput>(kafkaProps)
val oppgaveId = UUID.randomUUID().toString()
val nokkelInput = NokkelInputBuilder() .withEventId(oppgaveId) .withGrupperingsId("123") .withFodselsnummer(fodselsnummer) .withNamespace("test-team") .withAppnavn("demo-app") .build()
val oppgaveInput = OppgaveInputBuilder() .withTidspunkt(LocalDateTime.now()) .withSynligFremTil(LocalDateTime.now().plusDays(14)) .withTekst("Dette er et oppgave-varsel") .withLink(URL("https://www.nav.no")) .withSikkerhetsnivaa(4) .withEksternVarsling(true) .withSmsVarslingstekst("Dette er en sms om oppgave") .withPrefererteKanaler("SMS")
kafkaProducer.send(ProducerRecord(gammeltOppgaveTopic, nokkelInput, oppgaveInput))// ...val gammeltDoneTopic = "min-side.aapen-brukernotifikasjon-done-v1"
val done = DoneInputBuilder() .withTidspunkt(now())
kafkaProducer.send(ProducerRecord(gammeltDoneTopic, nokkel, done))Nytt oppsett med kotlin-builder
Section titled “Nytt oppsett med kotlin-builder”val nyttVarselTopic = "min-side.aapen-brukervarsel-v1"
val kafkaProps = Properties().apply { put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer::class.java) put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer::class.java) // ...}
val kafkaProducer = KafkaProducer<String, String>(kafkaProps)
val oppgaveId = UUID.randomUUID().toString()
val opprettVarsel = VarselActionBuilder.opprett { type = Varseltype.Oppgave varselId = oppgaveId sensitivitet = Sensitivitet.High ident = fodselsnummer tekst = Tekst( spraakkode = "nb", tekst = "Dette er et oppgave-varsel", default = true ) link = "https://www.nav.no" aktivFremTil = ZonedDateTime.now().plusDays(14) eksternVarsling { preferertKanal = EksternKanal.SMS smsVarslingstekst = "Dette er en sms om oppgave" }}
kafkaProducer.send(ProducerRecord(nyttVarselTopic, oppgaveId, opprettVarsel))// ...val inaktiverVarsel = VarselActionBuilder.inaktiver { varselId = oppgaveId}
kafkaProducer.send(ProducerRecord(nyttVarselTopic, oppgaveId, inaktiverVarsel))Kontakt
Section titled “Kontakt”Ta kontakt med oss på Slack hvis du lurer på noe.
