본문으로 건너뛰기
← 블로그로 돌아가기

이 글의 모듈: Integration Flow Helper

SAP CPI ProcessDirect와 JMS: iFlow 간 header 전달 방법

SAP CPI에서 ProcessDirect와 JMS로 iFlow 간에 header와 exchange property를 전달하는 방법: 일치시켜야 할 주소와 큐, 무엇이 넘어가는지, 디버깅 방법을 다룹니다.

SAP CPI ProcessDirect와 JMS: iFlow 간 header 전달 방법

SAP CPI의 큰 통합은 여러 iFlow로 나뉩니다. 하나는 수신하고, 나머지는 보강, 매핑, 전송을 맡습니다. ProcessDirect는 같은 tenant의 다른 iFlow를 직접 호출하고, JMS는 메시지를 큐에 넣어 다른 iFlow가 나중에 읽게 합니다. 어느 쪽이든 질문은 같습니다. 내 header와 속성 중 어느 것이 반대편에 도착할까요?

이 글에서는 두 연결을 설정하는 방법, 무엇이 넘어가고 무엇이 넘어가지 않는지, 그리고 두 iFlow 사이에서 값이 사라진 이유를 찾는 방법을 설명합니다.

ProcessDirect: 한 iFlow가 다른 iFlow를 호출

호출하는 iFlow(생산자)는 ProcessDirect 수신기 어댑터를 사용합니다. 호출되는 iFlow(소비자)는 ProcessDirect 발신자 어댑터로 시작합니다. 둘 다 Address 필드가 있으며, 양쪽 주소가 정확히 같을 때만 호출이 연결됩니다. 예:

Producer iFlow  ->  ProcessDirect receiver   Address: /orders/enrich
Consumer iFlow  <-  ProcessDirect sender     Address: /orders/enrich

두 iFlow는 같은 tenant에서 실행되며, 생산자가 호출하려면 소비자가 먼저 배포되어 있어야 합니다. 한 주소에서는 배포된 소비자 하나만 수신 대기할 수 있습니다. Request-Reply 단계와 함께 쓰면 소비자의 최종 메시지가 응답으로 생산자에게 돌아갑니다.

ProcessDirect로 넘어가는 것과 넘어가지 않는 것

소비자는 메시지 본문과 메시지 header를 받습니다. exchange property는 넘어가지 않고 남습니다. 소비자는 생산자의 속성이 하나도 없는 새 exchange로 시작합니다.

속성을 전달하려면 호출 직전에 Content Modifier로 header에 복사하세요. 예를 들어 소스 유형이 Property이고 값이 orderId인 header orderId를 만듭니다. 소비자에서 속성으로 다루는 편이 좋다면 그곳에서 다시 속성으로 복사하세요. 소비자가 받지 말아야 할 header, 특히 큰 header는 제거하세요.

JMS: 큐를 통해 메시지 전달

JMS에서는 생산자의 JMS 수신기 어댑터가 메시지를 큐에 쓰고, 같은 Queue Name을 지정한 JMS 발신자 어댑터를 가진 소비자 iFlow가 이를 읽습니다. 두 iFlow는 분리되어, 생산자는 기다리지 않고 소비자는 실패한 메시지를 재시도합니다.

  • header는 메시지와 함께 저장되어 소비자에게 도착합니다.
  • exchange property는 JMS 수신기에서 Transfer Exchange Properties를 켜지 않는 한 저장되지 않습니다.
  • 메시지와 함께 저장되는 모든 것에는 크기 제한이 있으므로 header와 전달하는 속성은 작게 유지하세요.
  • 소비자에서는 header SAPJMSRetries로 메시지가 몇 번 재시도되었는지 알 수 있습니다.

나란히 비교

ProcessDirectJMS
iFlow 간 연결양쪽에 같은 Address양쪽에 같은 Queue Name
호출직접 호출, 응답을 반환할 수 있음비동기, 큐를 통해
메시지 본문전달됨전달됨
header전달됨전달됨
exchange property전달되지 않음: header로 복사Transfer Exchange Properties를 켠 경우에만 전달됨

header 이름은 양쪽 모두에서 대소문자를 구분하지 않지만 exchange property 이름은 구분합니다. 따라서 소비자에서 복원한 속성은 이후 단계가 읽는 철자와 정확히 같아야 합니다.

값이 도착하지 않을 때

  1. 주소나 큐 이름을 앞의 슬래시와 대소문자까지 포함해 한 글자씩 비교하세요.
  2. 소비자가 배포되어 시작된 상태인지 확인하세요.
  3. 그 값이 속성이었는지 확인하세요. ProcessDirect로는 절대 도착하지 않고, JMS로는 Transfer Exchange Properties를 켠 경우에만 도착합니다.
  4. 생산자의 출구에서 어떤 Content Modifier도 그 header를 제거하지 않는지 확인하세요.
  5. 두 iFlow를 로그 수준 Trace로 실행하고, 생산자의 마지막 단계와 소비자의 첫 단계의 header를 비교하세요.

일반적인 점검 방법은 알 수 없는 header와 속성에 관한 글에서, 값을 읽는 문법은 SAP CPI의 Camel Simple 표현식에서 다룹니다.

Kitegra가 도와주는 방법

브라우저 확장 프로그램 Kitegra는 iFlow 간의 ProcessDirect 및 JMS 연결을 따라갑니다. 소비자에서 ${ 또는 $를 입력하면 연결된 iFlow가 설정한 header와 그들이 공유하는 링크 이름을 제안하므로, 철자를 확인하려고 생산자를 열 필요가 없습니다.

내비게이터는 SAP 계정별로 tenant, package, iFlow를 나열하므로 연결의 한쪽에서 다른 쪽으로 바로 이동할 수 있습니다. 확장 프로그램은 iFlow의 내용을 저장, 배포, 편집하지 않으며, tenant는 이름이 정해진 네 가지 작업 중 하나를 클릭할 때만 바뀝니다. 이 작업들은 끌 수 있습니다.

메시지 하나를 생산자에서 소비자까지 따라가려면 Correlation ID로 찾아보세요. 타임라인에 그 메시지가 거쳐 간 모든 iFlow가 나열됩니다.

Kitegra 계정이 없어도 모듈당 5개 iFlow에서 사용할 수 있습니다. Free 요금제는 50개, Starter는 100개, Pro는 300개까지 지원하며 Business는 제한이 없습니다. 요금제 비교하기.

다음 iFlow에서 사용해 보세요

Kitegra가 SAP Integration Suite 디자이너에서 무엇을 하는지 읽어 보거나, Kitegra의 다른 Chrome 확장 프로그램과 함께 살펴보세요.

자주 묻는 질문

SAP CPI에서 header는 ProcessDirect로 전달되나요?

네. 소비자 iFlow는 메시지 본문과 header를 받습니다. exchange property는 전달되지 않습니다.

ProcessDirect로 exchange property를 다른 iFlow에 전달하려면 어떻게 하나요?

ProcessDirect 호출 전에 Content Modifier로 header에 복사하고, 소비자에서 필요하면 다시 속성으로 복사하세요.

ProcessDirect 호출이 연결되지 않는 이유는 무엇인가요?

주소가 한 글자나 슬래시 하나라도 다르거나, 소비자 iFlow가 같은 tenant에 배포되어 있지 않기 때문입니다.

JMS는 exchange property를 유지하나요?

JMS 수신기 어댑터에서 Transfer Exchange Properties를 켠 경우에만 유지합니다. header는 항상 메시지와 함께 저장됩니다.

JMS 메시지가 몇 번 재시도되었는지 어떻게 알 수 있나요?

소비자 iFlow에서 header SAPJMSRetries를 읽으세요. 예를 들어 일정 횟수가 지나면 재시도를 멈추는 데 쓸 수 있습니다.

두 iFlow가 같은 ProcessDirect 주소에서 수신 대기할 수 있나요?

아니요. 한 주소는 배포된 소비자 하나만 사용할 수 있으므로 소비자마다 각자의 주소를 지정하세요.

디자이너를 떠나지 않고 iFlow 작업하기

Kitegra을 Chrome 또는 Microsoft Edge에 추가하세요. 계정 없이 무료로 시작할 수 있습니다.