3.3. 패킷을 가로채기하여 메시지 감사
브로커를 입력하거나 종료하고 패킷을 감사하거나 메시지를 필터링하는 패킷을 가로채기합니다. 인터셉터는 가로채는 패킷을 변경합니다. 이로 인해 인터셉터가 강력하지만 잠재적으로 위험해질 수 있습니다.
고객의 비즈니스 요구 사항에 맞게 인터셉터를 개발합니다. 인터셉터는 프로토콜마다 다르며 적절한 인터페이스를 구현해야 합니다.
인터셉터는 부울 값을 반환하는 intercept()
메서드를 구현해야 합니다. 값이 true
이면 메시지 패킷은 계속됩니다. false
인 경우 프로세스가 중단되고 다른 인터셉터가 호출되지 않으며 메시지 패킷은 더 이상 처리되지 않습니다.
3.3.1. 인터셉터 생성 링크 복사링크가 클립보드에 복사되었습니다!
인터셉터는 가로채는 패킷을 변경할 수 있습니다. 직접 들어오고 나가는 인터셉터를 만들 수 있습니다. 모든 인터셉터는 프로토콜별로 다르며 각각 서버를 입력하거나 종료하는 모든 패킷에 대해 호출됩니다. 이를 통해 인터셉터를 생성하여 패킷 감사와 같은 비즈니스 요구 사항을 충족할 수 있습니다.
인터셉터와 해당 종속 항목을 브로커의 Java 클래스 경로에 배치해야 합니다. 기본적으로 classpath의 일부이므로 < broker_instance_dir> /lib
디렉터리를 사용할 수 있습니다.
다음 예제에서는 전달된 각 패킷의 크기를 확인하는 인터셉터를 생성하는 방법을 보여줍니다.
예제에서는 각 프로토콜에 대해 특정 인터페이스를 구현합니다.
절차
적절한 인터페이스를 구현하고
intercept()
메서드를 덮어씁니다.AMQP 프로토콜을 사용하는 경우
org.apache.activemq.artemis.protocol.amqp.broker.AmqpInterceptor
인터페이스를 구현합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 코어 프로토콜을 사용하는 경우 인터셉터는
org.apache.artemis.activemq.api.core.Interceptor
인터페이스를 구현해야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow MQTT 프로토콜을 사용하는 경우
org.apache.activemq.artemis.core.protocol.mqtt.MQTTInterceptor
인터페이스를 구현합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow STOMP 프로토콜을 사용하는 경우
org.apache.activemq.artemis.core.protocol.stomp.StompInterceptor
인터페이스를 구현합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 인터셉터를 사용하도록 브로커 구성 링크 복사링크가 클립보드에 복사되었습니다!
사전 요구 사항
-
인터셉터 클래스를 생성하고 브로커의 Java 클래스 경로에 (및 해당 종속 항목)를 추가합니다. 기본적으로 classpath의 일부이므로 <
broker_instance_dir> /lib
디렉터리를 사용할 수 있습니다.
절차
-
Open
<broker_instance_dir>/etc/broker.xml
<broker
_instance_dir> /etc/broker.xml에 구성을 추가하여 인터셉터를 사용하도록 브로커를 구성합니다.
인터셉터가 수신되는 메시지의 경우
class-name
을remoting-incoming-interceptors
목록에 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터가 발신 메시지의 용도인 경우
class-name
을remoting-outgoing-interceptors
목록에 추가하십시오.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.3. 클라이언트 측의 인터셉터 링크 복사링크가 클립보드에 복사되었습니다!
클라이언트는 인터셉터를 사용하여 클라이언트가 서버로 전송하거나 서버가 클라이언트로 전송한 패킷을 가로챌 수 있습니다. 브로커 측 인터셉터에서 false
값을 반환하면 다른 인터셉터가 호출되지 않고 클라이언트가 패킷을 추가로 처리하지 않습니다. 이 프로세스는 발신 패킷이 차단
방식으로 전송되지 않는 한 투명하게 수행됩니다. 이 경우 ActiveMQException
이 호출자에게 throw됩니다. throw된 ActiveMQException
에는 false
값을 반환한 인터셉터 이름이 포함되어 있습니다.
서버에서 클라이언트 인터셉터 클래스와 해당 종속 항목을 클라이언트의 Java 클래스 경로에 추가하고 적절하게 인스턴스화하고 호출해야 합니다.