Sist endret: 29. sep. 2025

Events

API

Offentlig API

Følgende API-kontrollere er definert:

Privat API

API-kontrollerne listet nedenfor er utelukkende for bruk innenfor Notification-løsningen:

Database

Hendelsesdata lagres vedvarende i en PostgreSQL-database.

Tabeller

Hver tabell i events-skjemaet er beskrevet i tabellen nedenfor, etterfulgt av et diagram som viser forholdet mellom tabellene.

TabellBeskrivelse
eventsInneholder hver cloud event og registreringstidspunkt
subscriptionInneholder metadata for hvert hendelsesabonnement

Diagram av Events-database
Diagram av Events-database

Indekser

En rekke indekser har blitt introdusert for å øke ytelsen til de ofte brukte spørringene.

indekstabell
events_pkeyevents
idx_events_computed_timeevents
idx_events_cloudevent_idevents
idx_events_cloudevent_subjectevents
idx_events_cloudevent_alternativesubjectevents
idx_events_cloudevent_sourceevents
idx_events_cloudevent_typeevents
idx_events_cloudevent_timeevents
idx_events_cloudevent_resource_sequencenoevents
idx_events_cloudevent_subject_timeevents
eventssubscription_pkeysubscription
idx_gin_subscription_consumersubscription
idx_subscription_subject_source_typesubscription
idx_btree_subscription_sourcefilterhashsubscription
idx_subscription_resourcefiltersubscription

Azure Storage-køer

Azure Storage-køer har blitt satt opp for å gjøre det mulig for .NET-applikasjonen og Azure Functions å sende data for prosessering av en annen tjeneste.

Logikk for innlegging av elementer i kø håndteres av EventsQueueClient og kalles fra alle relevante tjenester.

Køene vi opererer med er

  • events-registration
  • events-inbound
  • events-outbound
  • subscription-validation

Azure Functions

Flere Azure Functions har blitt satt opp for å frikoble prosessering og utsending av hendelser samt abonnementsvalidering. Alle funksjoner kjøres basert på Storage Queue-triggere. Et viktig prinsipp for funksjonene er at hver funksjon kun skal ha en enkelt avhengighet til en logisk handling, f.eks. lagre til database, sende til mottaker osv. På denne måten, hvis handlingen mislykkes, kan et nytt forsøk gjøres uten uventede bivirkninger.

  • EventsRegistration : Sender hendelser til internt API-endepunkt som lagrer cloud event vedvarende til database og ved suksess sender til internt API-endepunkt for innkommende prosessering.
  • EventsInbound : Sender hendelse til internt API-endepunkt som finner abonnementer med filtre som matcher cloud event.
  • EventsOutbound POST-er cloud event til webhook-endepunkt tilknyttet et abonnement.
  • SubscriptionValidation POST-er validerings-cloud event til brukerdefinert webhook-endepunkt for å sjekke at det er klart til å motta data. Hvis det er klart, sendes en forespørsel til internt API-endepunkt som oppdaterer statusen i databasen.
NavnTriggerkøRetry-mekanisme
EventRegistrationevents-registrationstandard
EventsInboundevents-inboundstandard
EventsOutboundevents-outboundCustomQueueProcessorFactory
SubscriptionValidationsubscription-validationCustomQueueProcessorFactory

Avhengigheter

Mikrotjenesten benytter seg av en rekke eksterne og Altinn-tjenester samt .NET-biblioteker for å støtte den tilbudte funksjonaliteten. Finn beskrivelser av nøkkelavhengigheter nedenfor.

Eksterne tjenester

TjenesteFormålRessurser
Azure Database for PostgreSQLEr vert for databasenDokumentasjon
Azure API ManagementAdministrerer tilgang til offentlig APIDokumentasjon
Azure FunctionsEr vert for serverløse funksjonerDokumentasjon
Azure Key VaultBeskytter hemmeligheter brukt av mikrotjenestenDokumentasjon
Azure Kubernetes Services (AKS)Er vert for mikrotjenesten og cron-jobberDokumentasjon
Azure MonitorTelemetri fra applikasjonen sendes til Application InsightsDokumentasjon
Azure StorageEr vert for køene og lagrer data vedvarende i køerDokumentasjon

Altinn-tjenester

TjenesteFormålRessurser
Altinn AuthorizationAutoriserer tilgang til API-etRepository
Altinn RegisterTilbyr oppslag av alternative subjekter for person og orgRepository

.NET-biblioteker

Events mikrotjenesten og funksjonene benytter seg av en rekke biblioteker for å støtte den tilbudte funksjonaliteten.

BibliotekFormålRessurser
Azure.Storage.QueuesBrukes til å sende data til lagringskøeneRepository, Dokumentasjon
CloudNative.CloudEvents.AspNetCoreBrukes til koding og dekoding av cloud eventsRepository, Dokumentasjon
AccessTokenBrukes til å validere tokens i forespørslerRepository, Dokumentasjon
JWTCookieAuthenticationBrukes til å validere Altinn-token (JWT)Repository, Dokumentasjon
NpgsqlBrukes til å få tilgang til databaseserverenRepository, Dokumentasjon
YuniqlDB-migreringRepository, Dokumentasjon

En fullstendig liste over NuGet-avhengigheter er tilgjengelig på GitHub.

Testing

Kvalitetsporter implementert for et prosjekt krever 80 % kodedekning for enhets- og integrasjonstestene kombinert. xUnit er rammeverket som brukes, og Moq-biblioteket støtter mocking av deler av løsningen.

Enhetstester

Enhetstestprosjektene er tilgjengelige på GitHub.

Integrasjonstester

Ingen integrasjonstester som bruker eksterne komponenter har blitt implementert for denne løsningen. Se enhetstestprosjektet for alle tester relatert til Events.

Automatiserte tester

Det automatiserte testprosjektet er tilgjengelig på GitHub

De automatiserte testene for denne mikrotjenesten er implementert gjennom Grafanas k6. Verktøyet er spesialisert for lasttester, men vi bruker det også for automatiserte API-tester. Testsettet brukes for både brukstilfelle- og regresjonstester.

Brukstilfelle-tester

Alle brukstilfelle-arbeidsflyter er tilgjengelige på GitHub

Brukstilfelle-tester kjøres hvert 15. minutt gjennom GitHub Actions. Testene som kjøres under brukstilfelle-testene er definert i k6-testprosjektet. Målet med testene er å kjøre gjennom sentral funksjonalitet i løsningen for å sikre at den kjører og er tilgjengelig for våre sluttbrukere.

Regresjonstester

Regresjonstester er verter i Azure DevOps pipelines og utløses ved slutten av en release pipeline.

Hosting

Web API

Mikrotjenesten kjører i en Docker-container som er verter i AKS, og den er distribuert som en Kubernetes-deployment med autoskaleringsmuligheter

Events-applikasjonen kjører på port 5090.

Se DockerFile for detaljer.

Azure Functions

Azure-funksjonene er verter i en funksjonsapp som kun inneholder hendelsesrelaterte funksjoner.

Azure Storage

Storage-køene er verter i en geo-sone-redundant, generell formål v2-lagringskonto.

Database

Databasen er verter på en PostgreSQL fleksibel server i Azure.

Bygg & distribusjon

Web API

Azure Functions

-Bygging av Azure Function zip-filen gjøres i en Azure DevOps Pipeline

Database

  • Migreringsskript kopieres inn i Docker-bildet til web API-et når dette bygges
  • Kjøring av skriptene skjer ved oppstart av applikasjonen og er aktivert av YUNIQL

Kjør på lokal maskin

Instruksjoner om hvordan du setter opp tjenesten på lokal maskin for utvikling eller testing er dekket av README i repositoriet.