2017-03-07 3 views
1

MQCONNX 함수를 호출하는 C API를 사용하여 IBM MQ 8.0에 연결하는 응용 프로그램을 작성하고 있습니다. 이 응용 프로그램의 여러 인스턴스를 동시에 실행하고 MQ Explorer를 열어 큐 관리자에 대한 응용 프로그램 연결을 나열하면 각 연결에 대한 항목이 표시됩니다. 그러나 항목의 이름은 모두 "앱 이름"(실행 파일의 이름)이므로 연결되는 인스턴스와 연결되지 않은 인스턴스를 구별하기 어렵습니다.IBM MQ에 연결할 때 "app name"을 변경 하시겠습니까?

MQ Explorer에서 "app name"으로 표시되는 값을 변경할 수 있습니까? 내 응용 프로그램에서 인스턴스 식별자를 전달하고 싶습니다만, MQCONNX에 대한 설명서를 살펴보면 어느 옵션도 적용되지 않는 것 같습니다.

+0

클라이언트 응용 프로그램이 실행되는 OS는 언급하지 않았지만 프로그램에서 프로세스 이름을 설정하기 위해 Linux에서 다른 작업을 추가 했으므로 Windows 및 Solaris에 대한 몇 가지 유사한 대답을 찾았습니다. 다른 OS를 사용하는 경우에도 잘 작동 할 수 있습니다. – JoshMc

답변

3

APPLTAG 아래의 IBM MQ v8.0 지식 센터 페이지 "DISPLAY CONN"에서 MQ가 값을 결정하는 방법을 보여줍니다. 당신은 당신의 클라이언트 응용 프로그램이 실행되는 OS 어떤 상태하지 않았다, Unix 및 Windows 용 정보는 다음과 같습니다

  • UNIX 과정

    HP-UX에 프로세스 이름은 14 개 문자를 초과하는 경우, 처음 14 문자 만 표시됩니다. 프로세스 이름이 28자를 초과하면 다른 모든 플랫폼에서 처음 28 자만 표시됩니다.
  • Windows 프로세스

    이 전체 프로그램 경로와 실행 파일 이름으로 구성되어 있습니다. 길이가 28자를 넘으면 마지막 28 자만 표시됩니다.
모든 상황을 설정하여이는 MQ 탐색기에 표시되는 "응용 프로그램 이름"에 영향을주지 않습니다, 각 메시지의 MQMD에 APPLNAME을 변경할 수 있습니다 @Attila Repasi에서 언급 한 바와 같이

.


한 작업의 주위에 당신이 유닉스에서 실행하는 경우를 생각 프로그램에 별도의 심볼릭 링크 이름이 다른 각을 만드는 것입니다. 그런 다음 서로 다른 심볼릭 링크 이름을 사용하여 각 사본을 실행하면 MQ Explorer가 표시하는 "응용 프로그램 이름"으로 반영됩니다.


심볼릭 링크가 필요없는 Linux에서 테스트 한 두 번째 해결 방법은 프로그램의 프로세스 이름 설정입니다. 나는 처음에 argv[0]을 쓰려고 시도했지만,이 과정 이름을 ps 출력으로 변경하는 동안 MQ가 표시하는 APPLTAG 값이 변경되지 않았습니다. 리눅스에서 발견 한 작업 방법은 아래에 있습니다.이 작업은 MQCONN 이전에 호출해야합니다.

char *process_name = "samplename\0"; 
prctl(PR_SET_NAME,process_name,NULL,NULL,NULL); 

는 @ " How to name a thread in Linux? [duplicate]"에 Fusspawn의 대답은 위의 구문을 도왔다.

유닉스 운영체제 MQI 클라이언트에서 이것을 테스트하는 동안 리눅스와 솔라리스에서 프로세스 이름이 OS에 의해 15 문자로 제한된다는 것을 발견했습니다. AIX에서만 RAPPLTAG에서 전체 28자를 표시 할 수있었습니다. Windows MQI 클라이언트는 전체 28 자까지도 표시 할 수 있습니다. IBM Knowledge Center에서는 HP-UX가 14 자로 제한되어 있지만 다른 Unix 플랫폼에서는 28 자로 제한된다는 것을 나타냅니다. Linux 및 Solaris의 경우 15 자로 제한됩니다.

유용한 답변 :


Java API 용 IBM MQ 클래스 사용 지식 센터의 "DISPLAY CONN"페이지는 Java API 클라이언트 용 IBM MQ 클래스가 이 값. 이는 IBM MQ 지식 센터 페이지 "Setting up the IBM MQ environment for IBM MQ classes for Java"에서 아래에 표시됩니다. 응용 프로그램 이름을으로 설정하여 큐 관리자에 연결을 식별합니다. 이것은 v7.5 이후에만 사용 가능합니다.

응용 프로그램 이름은 28 자로 제한되며 긴 이름은 잘릴 수 있도록 잘립니다. 응용 프로그램 이름을 지정하지 않으면 기본값이 제공됩니다. 기본 이름은 호출하는 (기본) 클래스를 기반으로하지만,이 정보를 사용할 수없는 경우 Java 용 WebSphere MQ Client 텍스트가 사용됩니다.

...

MQQueueManager 생성자에 전달 된 속성 해시 테이블에서 응용 프로그램 이름을 설정하려면 MQConstants.APPNAME_PROPERTY 키를 사용하여 속성 해시 테이블에 이름을 추가하십시오. JMS의 API 클라이언트에 대한


IBM MQ 클래스는이 값을 설정할 수 있습니다. 이는 IBM MQ 지식 센터 페이지 "Properties of IBM MQ classes for JMS objects > APPLICATIONNAME"에 명시되어 있습니다. 이것은 v7.5 이후에만 사용 가능합니다.

적용 객체

ConnectionFactory에, QueueConnectionFactory와, TopicConnectionFactory와, XAConnectionFactory, XAQueueConnectionFactory, XATopicConnectionFactory

JMS 관리 도구 긴 이름 : APPLICATIONNAME

JMS 관리 도구 짧은 이름 : APPNAME

,515,

프로그래밍 액세스

세터/게터

  • MQConnectionFactory.setAppName()
  • MQConnectionFactory.getAppName()

인 임의의 유효한 문자열 더 이상 그쪽으로 n 28 자. 더 긴 이름 은 필요한 경우 주요 패키지 이름을 제거하여 적합하도록 조정됩니다. 예를 들어 호출하는 클래스가 com.example.MainApp 인 경우 전체 이름이 사용되지만 호출하는 클래스가 com.example.dictionaryAndThesaurus.multilingual.mainApp이면 multilingual.mainApp라는 이름이 사용됩니다. 유효한 길이에 맞는 클래스 이름과 가장 오른쪽 패키지 이름의 가장 긴 조합입니다.

클래스 이름 자체가 28자를 초과하면 이 잘리는 것입니다. 예를 들어, com.example.mainApplicationForSecondTestCase는 mainApplicationForSecondTest가됩니다.

1

MQOO_SET_ALL_CONTEXT 및 MQPMO_SET_ALL_CONTEXT 옵션을 사용하여 보내는 메시지의 응용 프로그램 이름을 변경할 수 있습니다.

하지만 채널 상태에 표시된 애플리케이션 이름을 변경할 수 있다고 생각하지 않습니다.

그러나 다른 OS 사용자로 응용 프로그램의 다른 인스턴스를 실행할 수 있습니다. 사용자 이름은 MCA 사용자 ID를 겹쳐 쓰지 않으면 용도에 사용할 수있는 상태 정보에도 표시됩니다. (또는 SSL 연결을 사용하여, 정보 앱 인스턴스를 구분하는 표시 인증서는 SSL을 사용하여 비슷한 일을 할 수 있습니다.)

1

난 당신이 MQOO_SET_ALL_CONTEXT 및 MQPMO_SET_ALL_CONTEXT 옵션을, 내가 강하게 사용 "수"그 아틸라에 동의하는 동안 당신이하지 말 것을 제안합니다.

이러한 옵션을 사용하는 경우 그 결과를 이해해야합니다. 각 메시지의 다음 MQMD 필드는 공백 및/또는 null 남아있을 것입니다 그리고 응용 프로그램까지를 채울 수 있습니다 :

  • AccountingToken
  • ApplIdentityData
  • ApplOriginData
  • PutApplName
  • PutApplType을
  • PutDate
  • PutTime
  • UserIdentifier

MQ Explorer에서 뭔가 의미가없는 것을보기 위해 얼마나 많은 노력을 기울여야합니까?

또한 이러한 옵션을 사용하려면 UserId (또는 그룹)가 열려고하는 대기열에 대해 "+ set"MQ OAM 권한이 필요합니다.

+0

수정 :'+ set' 권한은 응용 프로그램이 대기열에서'MQSET' 호출을 수행하도록 허용합니다. 'MQOO_SET_ALL_CONTEXT'의 경우, 권한은'qmgr'과 큐 모두에서'+ setall'을 요구합니다. – JoshMc