Meldingsformat

I forbindelse med office 365-integrasjon for UiA arbeides det med bruk av message broker for å formidle meldinger. Modellen vil være:

Changelog events → melding til egen broker ← melding hentes av UiA

Egen broker kan f.eks. være en RabbitMQ-server. Denne tilgjengeligjør meldinger for eksterne konsumenter, som f.eks UiA. I fremtiden kan brokeren vår brukes til å formidle meldinger til andre konsumenter.

En melding består av metadata og en payload. Det er ulike protokoller inne i bildet, så hva metadata og payload er, varierer.

Behov

Formålet med broker og meldingskø er nå å formidle at endringer er foretatt. Mottageren kan selv slå opp i Cerebrum efter data, men det er nødvendig å indikere hva som er endret, slik at mottager ikke trenger å lete efter hva som er endret.

Topics og køer

Hjertet i meldingsbrokere er topic og køer. Vi ønsker å kunne legge inn change-type i topic, slik at mottager enkelt kan abonnere på ønskede endringer.

Kanskje ønsker vi også en modell hvor kombinasjon av change type og spreads mappes til topic?

Payload-format

Forslaget er at payload inneholder en dict:

change:(streng) endringstype, f.eks. str(change_type) hvis ikke dette er for internt.
context:(streng) spread for subject
subjecttype:(streng) «account», «group» …
subject:(streng) brukernavn
subjectid:(streng) id for bruker til REST-oppslag
data:(ordbok) endrede attributter

Innholdet i payload bør revurderes når REST-API er spikret. AMQP støtter også gruppering av meldinger, slik at flere meldinger kan brukes til å si noe om «samme» endring. Isåfall kan man vurdere å sende én melding per attributt, eller som her å slå sammen endringer på samme entitet.

Eksempel på meldinger

Følgende er eksempler på henholdsvis tilslag, modifikasjon og sletting av karantener:

{'category': 'quarantine',
 'subjectid': 2L,
 'objectid': None,
 'subjecttype': 'account',
 'data': {'type': 'auto_no_aff'},
 'context': None,
 'change': 'add',
 'objecttype': None}

{'category': 'quarantine',
 'subjectid': 2L,
 'objectid': None,
 'subjecttype': 'account',
 'data': {'type': 'auto_no_aff'},
 'context': None,
 'change': 'mod',
 'objecttype': None}

{'category': 'quarantine',
 'subjectid': 2L,
 'objectid': None,
 'subjecttype': 'account',
 'data': {'type': 'auto_no_aff'},
 'context': None,
 'change': 'del',
 'objecttype': None}

Følgende eksempler viser tilslag og fjerning av spread:

{'category': 'context',
 'subjectid': 2L,
 'objectid': None,
 'subjecttype': 'account',
 'data': {},
 'context': 'guest_account@ad',
 'change': 'add',
 'objecttype': None}

{'category': 'context',
 'subjectid': 2L,
 'objectid': None,
 'subjecttype': 'account',
 'data': {},
 'context': 'guest_account@ad',
 'change': 'delete',
 'objecttype': None}
Publisert 9. sep. 2015 15:46