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}