Aaron H. Kim Fearless Integration Maniac

메시지 전달 여부 확인하기.

2007-03-18
Aaron Kim

Orchestration에서 Send Shape과 Logical Send Port를 통해 Target System에 전송할 경우,
이 때 전송이 제대로 되었는지의 여부는 어떻게 확인할까요?

Orchestration에서 Send Shape을 통해 Message를 보낼 경우
이는 Messagebox에 Publish가 되었달 뿐이지, Target System에 전달이 되었다는 의미가 아닙니다.

Messagebox에 Publish된 Message는 이를 subscribe하고 있는 SendPort로 배달되고,
비로서 타겟시스템에 적합한 Adapter를 통해 Target System에 전달됩니다.
이 때도 타겟시스템에서 제대로 Message를 받았는지는 확실할 수가 없습니다.

Orchestration에서 이를 확인하기 위해서는 Message 전송 전에 System Context Property인 AckRequired를 설정해 줘야 합니다.Messaging Runtime에서는 Message에서 해당 Context를 발견하면 Message의 전송이 성공적으로 완료됨과 동시에 ACK를 Orchestration으로 돌려줍니다.

하지만 Orchestration은 직접 이 Context를 설정하는 것보다 좀 더 편리하게 디자인 되었으므로 그냥 간단히 Logical SendPort의 Delivery Notification Property를 Trasmitted로 바꾸는 것만으로 같은 효과를 누릴 수 있습니다.

만약 전송이 실패하면 NACK를 리턴하는데

Orchestration 에서 try Scope 내에 전송을 시도하고…DeliveryFailure Exception을 catch함으로써 Compensation등의 후속 처리를 할 수가 있습니다.

전송이 이상이 없을 경우는 ACK를 리턴하는데 이때는 당연히 아무것도 catch할 것이 없긴 하지만, ACK를 받기 전에는 Send Scope을 넘어가지 않습니다.


Similar Posts

Comments