Mikrotjeneste for administrering av arbeidsflyt i bidrag. Dette er en applikasjon som reagerer på hendelser definert i bidrag-kafka
Bidrag arbeidsflyt sørger for at mottatte Bidrag journalposter alltid har journalføringsoppgaver og at oppgavene er i synk med journalposten (gjelder,
enhet osv).
Arbeidsflyt vil lukke journalføringsoppgave hvis journalpost er journalført eller er overført til annen tema
Bidrag arbeisflyt lytter på oppgave-endret
og oppgave-opprettet
kafka hendelser for sjekke om en oppgave blir lukket før journalpost er
journalført.
Hvis oppgave er lukket men journalposten ikke er journalført vil arbeidsflyt automatisk opprette ny journalføringsoppgave for journalposten.
Arbeidsflyt lagrer journalposter med status mottatt og åpne journalføringsoppgaver i databasen. Dette brukes for å sjekke status på journalposten og for å kunne sjekke om en oppgave er endret fra journalføringsoppgave til noe annet. Denne informasjonen brukes da for å bestemme om en ny journalføringsoppgave skal opprettes eller ikke.
Journalpost slettes fra journalpost
tabellen hvis journalpost ikke lenger har status mottatt eller ikke lenger har tema BID/FAR. Dette vil føre til
at det ikke vil sjekkes for om journalposten mangler journalføringsoppgave eller ikke.
Hvis en journalføringsoppgave skal lukkes uten at journalpost er journalført/endret tema må journalpost slettes fra journalpost
tabellen.
Ellers vil arbeidsflyt opprette ny journalføringsoppgave med engang journalføringsoppgaven lukkes.
Alle kafka topics (opprett-oppgave, endret-oppgave, bidrag.journalpost) har samme feilhåndtering. Hvis behandling av melding feiler vil meldingen
forsøkes å behandles på nytt X antall ganger med eksponensiell backoff policy. X er en miljøvariabel KAFKA_MAX_RETRY
som er satt
i application.yaml. Denne er satt nå til 15.
Hvis behandlingen av melding fortsatt feiler etter X antall forsøk vil meldingen lagres i dead_letter_kafka
tabellen og kafka lytteren vil fortsette
å lese neste melding i topicen.
All feilede kafka meldinger lagres i tabellen dead_letter_kafka
. Scheduler i
klassen KafkaDLQRetryScheduler sjekker hver 30.min for rader
med retry=true
og prøver å prosessere feilede meldinger på nytt.
Hvis prosessering av melding feiler vil retry_count
inkrementeres med 1. Hvis retry_count
er høyere enn SCHEDULER_MAX_RETRY
som er satt
i application.yaml vil retry
settes til false
Retry må manuelt settes til true og retry_count=0
for at arbeidsflyt skal prøve å prosessere melding på nytt.
Følg denne guiden for å koble deg til databasen https://doc.nais.io/persistence/postgres/#personal-database-access
Dette er en spring-boot applikasjon og kan kjøres som ren java applikasjon, ved å
bruke maven
eller ved å bygge et docker-image og kjøre dette
- krever installasjon av java og maven
mvn clean install
deretter
mvn spring-boot:run
eller
cd target
java -jar bidrag-arbeidsflyt-<versjon>.jar
- krever installasjon av java, maven og docker
- docker image er det som blir kjørt som nais applikasjon
mvn clean install
deretter
docker build -t bidrag-arbeidsflyt .
docker run -p bidrag-arbeidsflyt
Start kafka lokalt i en docker container med følgende kommando på root mappen
docker-compose up -d
Start opp applikasjon ved å kjøre BidragArbeidsflytLocal.kt under test/kotlin mappen. Når du starter applikasjon må følgende miljøvariabler settes
-DAZURE_APP_CLIENT_SECRET=<secret>
-DAZURE_APP_CLIENT_ID=<secret>
Bruk kcat
til å sende meldinger til kafka topic. Feks
kcat -b 0.0.0.0:9092 -t bidrag.journalpost-feature -P -K:
og lim inn eks:
BID-2121212121:{"journalpostId":"BID-21221231233121","fnr":"20527722013","fagomrade":"BID","journalstatus":"M","sporing":{"brukerident":"z992903","correlationId":"localtest"}}
JOARK-12345678:{"journalpostId":"JOARK-12345678","fnr":"17478549350","fagomrade":"BID","enhet":"4806","journalstatus":"M","sporing":{"brukerident":"z992903","correlationId":"localtest"}}
og deretter trykk Ctrl+D. Da vil meldingen bli sendt til topic bidrag-journalpost
For oppgave
kcat -b 0.0.0.0:9092 -t bidrag-opprettet -P
kcat -b 0.0.0.0:9092 -t oppgave.opprettet -P
og lim inn eks:
{"id": 351382364, "tildeltEnhetsnr": "4806", "opprettetAvEnhetsnr": "4806", "journalpostId": "573782796", "aktoerId": "2578652659686", "beskrivelse": "Test kopier dokumenter til Bidrag", "tema": "BID", "oppgavetype": "VUR", "versjon": 1, "opprettetAv": "srvbisys", "prioritet": "HOY", "status": "OPPRETTET"}
For å kunne kjøre lokalt mot sky må du gjøre følgende
Åpne terminal på root mappen til bidrag-arbeidsflyt
Konfigurer kubectl til å gå mot kluster dev-gcp
# Sett cluster til dev-fss
kubectx dev-gcp
# Sett namespace til bidrag
kubens bidrag
# -- Eller hvis du ikke har kubectx/kubens installert
# (da må -n=bidrag legges til etter exec i neste kommando)
kubectl config use dev-gcp
Deretter kjør følgende kommando for å importere secrets. Viktig at filen som opprettes ikke committes til git
kubectl exec --tty deployment/bidrag-arbeidsflyt printenv | grep -E 'AZURE_|_URL|SCOPE|SRV|NAIS_APP_NAME|TOPIC' > src/test/resources/application-lokal-nais-secrets.properties
{"id":135937,"tildeltEnhetsnr":"4806","opprettetAvEnhetsnr":"9999","journalpostId":"453836625","saksreferanse":"123213123","tema":"BID","oppgavetype":"RETUR","versjon":1,"beskrivelse":"Returpost","fristFerdigstillelse":"2022-06-09","aktivDato":"2022-03-29","opprettetTidspunkt":"2023-05-24T13:19:35.25+02:00","opprettetAv":"srvbisys","prioritet":"HOY","status":"OPPRETTET","statuskategori":"AAPEN","ident":{"identType":"AKTOERID","verdi":"2421516513291","folkeregisterident":"22447402207"}}
Kjør filen BidragArbeidsflytLocal