35
Reliable Messaging Marc de Graauw

Reliable messaging

Embed Size (px)

Citation preview

Page 1: Reliable messaging

Reliable Messaging

Marc de Graauw

Page 2: Reliable messaging
Page 3: Reliable messaging

Betrouwbaar transport

• Netwerk is niet betrouwbaar

• Het is niet te garanderen dat twee partijen beide 100% zeker weten dat communicatie geslaagd is

• Het is wel te garanderen dat als de communicatie niet geslaagd is, tenminste een partij dat weet

• Aanname: vroeg of laat is het netwerk weer beschikbaar

Page 4: Reliable messaging

Eisen betrouwbaar transport

• Ieder bericht wordt minimaal een keer afgeleverd

• Ieder bericht wordt maximaal een keer afgeleverd

• Berichten worden afgeleverd in de volgorde waarin ze verzonden zijn

• Afgeleverde berichten worden bewaard

Page 5: Reliable messaging

Het Issue

• Transport over HTTP is niet betrouwbaar

• Geen antwoord op een bericht:

– door timeout, netwerk down, server down

– niet zeker of het bericht al dan niet aangekomen en/of verwerkt is

Page 6: Reliable messaging

HTTP Methods (RFC 2616)

• safe – heeft geen neveneffecten op de server

– HTTP: GET

– b.v.: opvragen informatie

• idempotent– laat server in zelfde staat na herhaling

– HTTP DELETE, PUT

– b.v. verwijderen record

• niet-idempotent– wijzigt server

– HTTP POST

– b.v. 100 aandelen kopen

Page 7: Reliable messaging

Zender Ontvanger

Bericht

Page 8: Reliable messaging

Zender Ontvanger

Bericht

Kopie van bericht

Ontvangstbevestiging

Verwerk bericht

Page 9: Reliable messaging

Zender Ontvanger

Kopie van bericht

Ontvangstbevestiging

Bericht

Ontvangstbevestiging

Verwerk bericht

Niet verwerken

Page 10: Reliable messaging

Betrouwbare aflevering

• Gegarandeerde aflevering– berichtnummers

– ontvangstbevestiging

– eventueel duplicaat zenden

• Eenmalige aflevering– duplicaatdetectie

– duplicaatverwijdering

• Volgordelijke aflevering– oplopende berichtnummering

Page 11: Reliable messaging

Eisen aan betrouwbaar transport

• Eis 1: duplicaatdetectie is nodig voor niet-idempotente acties• Eis 2: ontvangstbevestigingen zijn nodig bij niet-directe acties• Ontwerprichtlijn: Geef bij iedere interactie aan of deze veilig en/of

idempotent is• Ontwerprichtlijn: Ieder bericht waarop niet direct een (ander) antwoord

komt, krijgt een ontvangstbevestiging• Ontwerprichtlijn: Idempotente berichten waarop het verwachte antwoord

niet komt, worden herhaald met een nieuw bericht-id. Geen duplicaat dus, maar een nieuw bericht

• Ontwerprichtlijn: De ontvanger hoeft voor idempotente berichten geen status (bericht-id en verzonden antwoord) te bewaren

• Ontwerprichtlijn: Niet-idempotente berichten waarop het verwachte antwoord niet komt, worden herhaald met een duplicaat.

Page 12: Reliable messaging

Transport Level Reliability

Page 13: Reliable messaging

WS-ReliableMessaging

• Apache Sandesha 2 ondersteund WS-RM 1.1 voor Axis2 Java en C++• http://ws.apache.org/sandesha/sandesha2/index.html• WSO2 bevat Sandesha2 en ondersteund daarmee ook WS-RM 1.1.

• Metro 3.0.1 (onderdeel van J2EE reference implementatie• "glassfish") ondersteund in ieder geval WS-RM 1.1.• https://metro.dev.java.net/

• Apache CXF ondersteund gezien de source alleen WS-RM 1.0.

• JBossWS vanaf versie 3.0.1: ondersteund 1.0 en 1.1.• https://jira.jboss.org/jira/browse/JBWS-515• http://jbossws.jboss.org/mediawiki/index.php?title=WS_Reliable_Messaging

• Microsoft .Net ondersteund WS-RM 1.1 vanaf versie 3.5, Windows Communication Framework

Page 14: Reliable messaging
Page 15: Reliable messaging

Infra 1

Page 16: Reliable messaging

Infra 2tekenentoken, bericht

eindpunttransport,opslaan

Page 17: Reliable messaging

ZIMGBZ 1 GBZ 2

app

opslagack

ack

app

Page 18: Reliable messaging

WSRM patronen

• 1-way

• bidirectional

• anonymous

• veel berichten (atom. aanmelden)

• plaatjes

Page 19: Reliable messaging

OntvangerZender

HL7v3 Antwoord

HL7v3 Query

HL7v3 Accept Acknowledgement

HL7v3 Bericht

HL7v3 BerichtResponse (Accept or Reject)

HL7v3 Bericht

1. Queries

2. Bericht zonder

antwoord

3. Bericht met

antwoord

Page 20: Reliable messaging

ZIMGBZ 1

ack 1

HL7v3 bericht 1 + AckRequest

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

Page 21: Reliable messaging

ZIMGBZ 1

ack 1..5

HL7v3 bericht 1

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

HL7v3 bericht 2

HL7v3 bericht 3

HL7v3 bericht 4

HL7v3 bericht 5 + AckRequest

Page 22: Reliable messaging

ZIMGBZ 1

ack 2..5

HL7v3 bericht 1

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

HL7v3 bericht 2

HL7v3 bericht 3

HL7v3 bericht 4

HL7v3 bericht 5 + AckRequest

ack 1

HL7v3 bericht 1 + AckRequest

Page 23: Reliable messaging

ZIMGBZ 1

ack a1..a4

HL7v3 bericht a1

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

HL7v3 bericht a2

HL7v3 bericht b1

HL7v3 bericht a3

HL7v3 bericht a4 + AckRequest

HL7v3 bericht b2 + ackRequest

ack b1..b2

Page 24: Reliable messaging

ZIMGBZ 1

HTTP Response + HL7v3 Accept Ack

HTTP Request + HL7v3 bericht 1

Page 25: Reliable messaging

ZIMGBZ 1

HTTP Response + ack 1

HTTP Request +HL7v3 bericht 1 +

AckRequest

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

Page 26: Reliable messaging

ZIMGBZ 1

HTTP 200 OK

HTTP Request +HL7v3 bericht 1 +

AckRequest

CreateSequenceResponse

CreateSequence

TerminateSequenceResponse

TerminateSequence

HTTP 200 OK

HTTP Response +ack 1

Page 27: Reliable messaging

Welke communicatiepatronen?

• anonymous one-way, one message, one ack

• anonymous one-way, many messages, many acks

• addressed one-way, many messages, one ack?

• bidirectional – (nog) niet?

• alles anonymous?

Page 28: Reliable messaging

Business level Reliability

Page 29: Reliable messaging

businessdocument

EnvelopeHeaders:

businessdocument

reliability

security

Payload:

Web Service Sender

reliability module

transaction module

security module

et cetera

messagin

g

businessdocument

Web Service Receiver

reliability module

transaction module

security module

et cetera

messagin

g

Page 30: Reliable messaging

Sender Receiver

Duplicate Message

Message

Process Message

Acknowledgement

Scenario 1: Resending works

Page 31: Reliable messaging

Sender Receiver

Duplicate Message

Acknowledgement

Message

Acknowledgement

Process Message

Process Message

Scenario 2: Resending fails

Page 32: Reliable messaging

Sender Receiver

Duplicate Message

Acknowledgement

Message

Acknowledgement

Process Message

Discard Duplicate

Scenario 3: Reliable messaging

Page 33: Reliable messaging

Sender’sTransportModule

Receiver’sTransportModule

OrderMessage

Transport Ack Submit Order

Sender’sBusinessModule

Place Order

Receiver’sBusinessModule

Accept OrderAcceptMessage

Transport AckSubmit Accept

Page 34: Reliable messaging

GP’sTransportModule

PharmacistsTransportModule

GP’sConsultationApplication

Prescription

PharmacistsPrescriptionApplication

Ack prescription

prescription.id=x

Prescription

prescription.id=x

Prescription

prescription.id=x

Prescription

prescription.id=x

Prescription

prescription.id=xPrescription

prescription.id=x

Error

prescription.id=xalready exists

Error

prescription.id=xalready exists

Error

prescription.id=xalready exists

Page 35: Reliable messaging