문제
다른 서버 프로세스가 JMS 브로커를 통해 다양한 클라이언트의 JMS 메시지로 전달 된 요청을 처리하는 시스템이 있습니다.
메시지 소스를 식별하려고합니다. IP 또는 원산지에 대한 식별 정보를 얻는 방법이 있습니까?
설명 : 이미 알려지지 않은 사용자가 클라이언트를 배포 했으므로 메시지 클래스 변경을 피하려고 노력하고 있습니다 ...
해결책
JMS 사양에 언급 된 옵션 JMS 헤더가 있습니다. JMSXUSERID 일부 JMS 제공 업체가 지원하는 메시지를 보내는 사용자가 메시지를 보내는 사용자를 식별합니다 (브로커가 스푸핑을 피하는 것이 정확합니다).
예를 들어 여기에 있습니다 Apache ActiveMQ에서 활성화하는 방법
다른 팁
나는 그렇게 믿지 않는다. 적어도 나는 길을 찾을 수 없었습니다.
메시지 소스로 회신을 다시 보내야하는 경우 발신자가 "JMSREPLYTO"속성을 설정하고 해당 대상으로 다시 회신 할 수 있습니다.
또는 메시징 스키마를 약간 변경하고 소스 정보 메시지 자체를 포함시킬 수 있습니다. 발신자는 메시지에서 자신을 식별하고 수신은 거기에서 읽을 수 있습니다.
전송중인 메시지의 구성을 제어 할 수있는 경우 언제든지 메시지에 IP 주소를 속성으로 추가 할 수 있습니다. 그런 다음 값을 확인할 수 있습니다 GetStringProperty 메시지에 대한 메소드.
메시지를 보내는 클라이언트의 코드를 제어하면 속성 이름 (ipofsender”라는 속성 이름을 발명 할 수 있으며 모든 메시지에 메시지를 메시지를 포함시킬 수 있습니다 .SetStringProperty ().
// client code
String myIPString = ...;
Message m = session.createTextMessage();
m.setStringProperty("IPOfSender", myIPString);
...
JMS 서버에 따라 다릅니다. 일부 서버에는 연결 세부 정보를 볼 수있는 관리 도구/API가 있습니다.
Glassfish를 사용하여 메시지의 getjmsmessageId ()를 보면 "ID : 40-192.168.0.242 (F5 : 62 : C6 : 58 : 22 : 6F) -52506-12285191641"의 효과에 대한 문자열이 표시됩니다. . IP가 메시지 ID의 하위 문자열 인 것처럼 보입니다.
이것은 설정에서 볼 수있는 것이므로 다른 요인이있을 수 있지만 (예 : 스프링), 스트링이 프로그램 적으로 만들어지지 않았다는 것을 알고 있습니다.
짧은 대답 : 아니요