[XI/PI] About PI Queue

EAI/XI/PI 2013. 8. 1. 14:39
  • PI 전송 방식 분류


SAP Netweaver PI 에서는 BE, EO, EOIO의 3가지 메시지 전송 방식을 가지고 있으며 그 특징은 아래와 같다.  3가지 방식 중 EO, EOIO 방식만 Queue 를 사용한다.


 방식

내용 

 BE 

  • Best Effort의 약자
  • Queue를 사용하지 않는 Synchronous 방식 메시지 전송에 사용

 EO

  •  Exactly Once의 약자
  •  Asynchronous 방식이며 무작위 Queue를 사용
  •  메시지 전송 순서는 고려하지 않음

 EOIO

  • Exactly Once In Order의 약자
  • Asynchronous 방식이며 사전 정의된 고유의 Queue를 사용
  • 메시지는 PI 서버에 전송된 순서대로 처리됨



  • Queue를 사용하기 위한 기본 설정

EO 또는 EOIO와 같이 Queue를 사용하여 Asyncronous 방식으로 데이터를 전송하기 위해서는 해당 인터페이스의 Service Interface를 다음과 같이 설정한다.



  • File ChannelEO/EOIO 설정

Sender Channel의 Processing 탭을 선택한 후 Quality Of Service 항목을 다음과 같이 설정한다. Receiver Channel의 경우에는 설정이 필요하지 않다.



  • JDBC ChannelEO/EOIO 설정

Sender Channel의 Processing 탭을 선택한 후 Quality Of Service 항목을 다음과 같이 설정한다. Receiver Channel의 경우에는 설정이 필요하지 않다.



  • EO/EOIO 방식의 Queue 확인

SAP GUI를 사용하여 PI 서버에 접속한 후 다음 T-Code를 사용하여 Queue 상태 확인이 가능하다.

위와 같이 Queue List 상에서 확인하고자 하는 Queue를 더블클릭하면 상세 내역을 확인할 수 있다. EO 방식의 경우 무작위 이름의 Queue 들이 사용되며, EOIO 방식의 경우 Sender Channel에서 사전 정의한 Queue 이름이 사용된다.



  • EO/EOIO Queue 에러 처리

Queue에 들어간 메시지는 선입선출(FIFO) 방식으로 처리되며, 하나의 메시지가 처리 중 에러를 발생할 경우 같은 Queue에 들어간 나머지 메시지들은 대기상태에 들어가게 되며, 만약 EOIO 방식이라면 해당 인터페이스의 전체 메시지 처리가 중단되게 된다. 이 경우 에러가 발생된 메시지를 재처리하거나(재처리 가능한 경우), 혹은 삭제(데이터 자체 결함 등 재처리 불가한 경우)하여 대기 중인 메시지들이 처리될 수 있도록 하여야 한다.

   
    Queue 오류 확인 : 문제가 발생한 메시지를 더블클릭 후, XML 메시지 모니터 화면에서 내용을 확인한다.   


   Queue 메시지 삭제 : 삭제하고자 하는 메시지를 클릭한 후, 상단의 휴지통 모양 아이콘을 눌러 삭제한다.






Posted by INSPIEN
,

TotalMem: Java 가상 머신에서 사용할 수있는 메모리의 양입니다.

FreeMe  : 현재 Java 가상 머신이 사용할 수있는 사용하지 않는 메모리의 양입니다.


CurT:   : 현재 활성 시스템 스레드 수입니다.

MaxT    : 지금까지의 서버에서 동시에 활성화 된 시스템의 최대 스레드 수.


SSNs    : 현재 활성화 된 세션 수입니다.

SSNx    : 서버에서 동시에 활성화 된 최대 세션 수입니다.

SSNAvg  : 세션의 유효 기간의 평균 길이.


REQs    : 현재 실행중인 서비스 요청 수입니다.

REQx    : 동시에 마지막 폴링주기 (1 분) 사이에 실행하는 서비스 요청의 최대 수.

REQAvg  : 마지막 폴링주기 (1 분) 동안 서비스 요청의 평균 실행 시간의 길이.


StartReq: 마지막 폴링주기 (1 분) 사이에 시작한 서비스 요청 수입니다.

EndReq  : 마지막 폴링주기 (1 분) 사이에 종료 된 서비스 요청 수입니다.



※ StartReq 및 EndReq는 RIS서버에서 포워딩되는 count되지 않는다.

Posted by INSPIEN
,

webMethods API를 이용해서 IntegrationServer의 shutdown 명령을 처리하는 방법

첨부의 소스에 서버접속 정보입력후 처리가능함


현재 8.0 버전 환경기준으로 첨부의 소스가 참고하는 lib는 wm-isclient.jar , wm-g11nutils.jar, enttoolkit.jar, mail.jar 임 

SoftwareAG인스톨 경로의 common\lib 경로에서 찾을수 있습니다.


import com.wm.app.b2b.client.*;
import com.wm.util.*;

public class B2BShutdown {
	public static String hostName = null;
	public static String port = null;
	public static String userName = null;
	public static String password = null;
	public static String errorMsg = null;
	public static int numSecs = 15;
	public static String tmpStr = null;
	Context context = null;
	public boolean connected = false;

	public static void main(String[] args) {
		errorMsg = "";

		// Create an instance of this class
		B2BShutdown b2bServer = new B2BShutdown();
		System.out.println();

		b2bServer.connect(true);
		if (!b2bServer.connected) {
			System.exit(1);
		}
		b2bServer.shutdown();
		b2bServer.disconnect();
		System.exit(0);
	}

	public void connect(boolean dispMsg) {
		context = new Context();
		try {
			System.out.println("Try to connect .....");
			context.connect("127.0.0.1:5555", "test", "test");
			// context.connect(hostName + ":" + port, userName, password);
			connected = true;
		} catch (Exception e) {
			System.out.println("General Exception");
			// System.out.println(e.toString());
		}
	}

	public void shutdown() {
		try {
			System.out.println("Shutting down B2B Server... ");
			Values input = new Values();
			input.put("option", "force");
			context.invoke("wm.server.admin", "shutdown", input);
		} catch (ServiceException e) {
			System.out.println(e.toString());
			System.exit(1);
		}
	}

	/***********************************************************************/
	/* Delay printing the console message until the server is really down. */
	/***********************************************************************/

	public void disconnect() {
		for (int iCtr = 0; (connected) && (iCtr < 3); iCtr++) {
			context.disconnect();
			try {
				Thread.sleep(numSecs * 1000);
			} catch (InterruptedException ie) {
			}
			connect(false);
		}
		if (context != null)
			context.disconnect();
		System.out.println("B2B Server shutdown complete.");
	}

	public B2BShutdown() {
		System.out.println();
		System.out.println("******B2B Server shutdown utility*******");
		System.out.println();
	}
}




Posted by INSPIEN
,