Azure Service Bus JMS 2.0 개발자 가이드

이 가이드에는 JMS(Java Message Service) 2.0 API를 사용하여 Azure Service Bus와 통신하는 데 도움이 되는 자세한 정보가 포함되어 있습니다.

Java 개발자로서 Azure Service Bus를 접하는 경우 다음 문서를 읽어 보세요.

시작하기 개념

JMS(Java Message Service) 프로그래밍 모델

Java Message Service API 프로그래밍 모델은 다음 섹션에 나와 있습니다.

참고 항목

Azure Service Bus 프리미엄 계층은 JMS 1.1 및 JMS 2.0을 지원합니다.

Azure Service Bus - 표준 계층은 제한된 JMS 1.1 기능을 지원합니다. 자세한 내용은 이 설명서를 참조하세요.

JMS - 빌딩 블록

아래 구성 요소는 JMS 애플리케이션과 통신할 수 있습니다.

참고 항목

아래 가이드는 JMS(Java Message Service)용 Oracle Java EE 6 자습서에서 조정되었습니다.

JMS(Java Message Service)를 보다 잘 이해하려면 이 자습서를 참조하는 것이 좋습니다.

연결 팩터리

연결 팩터리 개체는 클라이언트에서 JMS 공급자와 연결하는 데 사용됩니다. 연결 팩터리는 관리자가 정의한 연결 구성 매개 변수 집합을 캡슐화합니다.

각 연결 팩터리는 , QueueConnectionFactory또는 TopicConnectionFactory 인터페이스의 ConnectionFactory인스턴스입니다.

Azure Service Bus와의 연결을 간소화하기 위해 이러한 인터페이스는 각각을 통해 ServiceBusJmsConnectionFactoryServiceBusJmsQueueConnectionFactory구현 ServiceBusJmsTopicConnectionFactory 됩니다.

Important

JMS 2.0 API를 활용하는 Java 애플리케이션은 연결 문자열 사용 TokenCredential 하거나 Microsoft Entra 지원 인증을 활용하기 위해 Azure Service Bus에 연결할 수 있습니다. Microsoft Entra 지원 인증을 사용하는 경우 필요에 따라 ID에 역할 및 권한을 할당해야 합니다.

Azure에서 시스템 할당 관리 ID를 만들고 이 ID를 사용하여 TokenCredential을 만듭니다.

TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();

다음 매개 변수를 사용하여 연결 팩터리를 인스턴스화할 수 있습니다.

  • 토큰 자격 증명 - OAuth 토큰을 제공할 수 있는 자격 증명을 나타냅니다.
  • 호스트 - Azure Service Bus 프리미엄 계층 네임스페이스의 호스트 이름입니다.
  • ServiceBusJms커넥트ionFactory설정 속성 모음( 포함)
    • connectionIdleTimeoutMS - 유휴 연결 제한 시간(밀리초)입니다.
    • traceFrames - 디버깅을 위해 AMQP 추적 프레임을 수집하는 부울 플래그입니다.
    • 기타 구성 매개 변수

팩터리는 아래와 같이 만들 수 있습니다. 토큰 자격 증명 및 호스트는 필수 매개 변수이지만 다른 속성은 선택 사항입니다.

String host = "<YourNamespaceName>.servicebus.windows.net";
ConnectionFactory factory = new ServiceBusJmsConnectionFactory(tokenCredential, host, null); 

JMS 대상

대상은 클라이언트에서 생성하는 메시지의 대상과 클라이언트에서 소비하는 메시지의 원본을 지정하는 데 사용하는 개체입니다.

대상은 Azure Service Bus의 엔터티- 큐(지점 및 지점 시나리오) 및 토픽(pub-sub 시나리오)에 매핑됩니다.

연결

연결은 JMS 공급자와의 가상 연결을 캡슐화합니다. Azure Service Bus를 사용하면 AMQP를 통해 애플리케이션과 Azure Service Bus 간의 상태 저장 연결을 나타냅니다.

다음 예제와 같이 연결 팩터리에서 연결이 만들어집니다.

Connection connection = factory.createConnection();

세션

세션은 메시지를 생성하고 사용하는 단일 스레드 컨텍스트입니다. 메시지, 메시지 생산자 및 소비자를 만드는 데 사용할 수 있지만, 전송 및 수신을 작업의 원자 단위로 그룹화하도록 허용하는 트랜잭션 컨텍스트도 제공합니다.

다음 예제와 같이 연결 개체에서 세션을 만들 수 있습니다.

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);

참고 항목

JMS API는 Service Bus 큐나 메시징 세션이 활성화된 토픽에서 수신되는 메시지를 지원하지 않습니다.

세션 모드

아래 모드를 사용하여 세션을 만들 수 있습니다.

세션 모드 동작
Session.AUTO_ACKNOWLEDGE 수신 호출에서 세션이 성공적으로 반환된 경우 또는 세션에서 메시지를 처리하기 위해 호출한 메시지 수신기가 성공적으로 반환될 경우, 세션은 클라이언트의 메시지 수신을 자동으로 승인합니다.
Session.CLIENT_ACKNOWLEDGE 클라이언트는 메시지의 승인 방법을 호출하여 소비된 메시지를 승인합니다.
Session.DUPS_OK_ACKNOWLEDGE 이 승인 모드는 메시지 배달을 지연적으로 승인하도록 세션에 지시합니다.
Session.SESSION_TRANSACTED 이 값은 세션이 로컬 트랜잭션을 사용하도록 지정하기 위해 커넥트ion 개체의 createSession(int sessionMode) 메서드에 인수로 전달될 수 있습니다.

세션 모드를 지정하지 않으면 기본적으로 Session.AUTO_ACKNOWLEDGE가 선택됩니다.

JMSContext

참고 항목

JMSContext는 JMS 2.0 사양의 일부로 정의됩니다.

JMSContext는 연결 및 세션 개체에서 제공하는 기능을 결합합니다. 연결 팩터리 개체에서 만들 수 있습니다.

JMSContext context = connectionFactory.createContext();

JMSContext 모드

Session 개체와 마찬가지로 JMSContext는 세션 모드에서 멘션 동일한 승인 모드로 만들 수 있습니다.

JMSContext context = connectionFactory.createContext(JMSContext.AUTO_ACKNOWLEDGE);

모드를 지정하지 않으면 기본적으로 JMSContext.AUTO_ACKNOWLEDGE가 선택됩니다.

JMS 메시지 생산자

메시지 생산자는 JMSContext 또는 Session을 사용하여 만들어지고 대상에 메시지를 보내는 데 사용되는 개체입니다.

다음 예제와 같이 독립 실행형 개체로 만들 수 있습니다.

JMSProducer producer = context.createProducer();

또는 메시지를 보내야 할 때 런타임에 생성됩니다.

context.createProducer().send(destination, message);

JMS 메시지 소비자

메시지 소비자는 JMSContext 또는 Session에서 만들어지고 대상으로 전송된 메시지를 수신하는 데 사용되는 개체입니다. 이 예제와 같이 만들 수 있습니다.

JMSConsumer consumer = context.createConsumer(dest);

receive() 메서드를 통해 동기 수신

메시지 소비자는 메서드를 통해 receive() 대상에서 메시지를 수신하는 동기 방법을 제공합니다.

인수/시간 제한을 지정하지 않거나 '0'의 시간 제한을 지정하면 메시지가 도착하거나 연결이 끊어지지 않는 한 소비자는 무기한 차단됩니다(이전 중 어느 것이든지).

Message m = consumer.receive();
Message m = consumer.receive(0);

0이 아닌 긍정 인수를 제공하면 타이머가 만료될 때까지 소비자가 차단됩니다.

Message m = consumer.receive(1000); // time out after one second.

JMS 메시지 수신기를 사용하여 비동기 수신

메시지 수신기는 대상에서 메시지를 비동기식으로 처리하는 데 사용되는 개체입니다. 특정 비즈니스 논리가 MessageListener 있어야 하는 메서드를 onMessage 포함하는 인터페이스를 구현합니다.

메서드를 사용하여 setMessageListener 특정 메시지 소비자에 대해 메시지 수신기 개체를 인스턴스화하고 등록해야 합니다.

Listener myListener = new Listener();
consumer.setMessageListener(myListener);

토픽에서 소비

JMS 메시지 소비자는 큐 또는 토픽일 수 있는 대상에 대해 만들어집니다.

큐의 소비자는 클라이언트 애플리케이션과 Azure Service Bus 간 Session(및 Connection)의 컨텍스트에 상주하는 클라이언트 쪽 개체일 뿐입니다.

그러나 토픽에 대한 소비자는 2개의 부분으로 구성됩니다.

  • Session(또는 JMSContext)의 컨텍스트에 상주하는 클라이언트 쪽 개체
  • Azure Service Bus의 엔터티인 구독.

구독은 여기에 설명되어 있으며 다음 중 하나일 수 있습니다.

  • 공유되는 지속형 구독
  • 공유되는 비지속형 구독
  • 공유되지 않는 지속형 구독
  • 공유되지 않는 비지속형 구독

JMS 큐 브라우저

JMS API는 애플리케이션이 큐의 메시지를 찾아보고 각 메시지에 대한 헤더 값을 표시할 수 있는 개체를 제공합니다 QueueBrowser .

다음 예제와 같이 JMSContext를 사용하여 큐 브라우저를 만들 수 있습니다.

QueueBrowser browser = context.createBrowser(queue);

참고 항목

JMS API는 토픽을 찾아보기 위한 API를 제공 하지 않습니다.

토픽 자체가 메시지를 저장하지 않기 때문입니다. 메시지가 토픽으로 전송되는 즉시 적절한 구독으로 전달됩니다.

JMS 메시지 선택기

수신된 메시지를 필터링하기 위해 애플리케이션을 수신하여 메시지 선택기를 사용할 수 있습니다. 메시지 선택기를 사용하여 수신 애플리케이션은 해당 책임 자체를 수행하는 대신 JMS 공급자(이 경우 Azure Service Bus)에 메시지를 필터링하는 작업을 오프로드합니다.

아래 소비자를 만들 때 선택기를 사용할 수 있습니다.

  • 공유 지속성 구독
  • 공유되지 않는 지속성 구독
  • 공유 비지속성 구독
  • 공유되지 않는 비지속성 구독
  • 큐 브라우저

AMQP 처리 및 Service Bus 작업 매핑

다음은 AMQP 처리가 Service Bus 작업으로 변환되는 방법입니다.

ACCEPTED = 1; -> Complete()
REJECTED = 2; -> DeadLetter()
RELEASED = 3; (just unlock the message in service bus, will then get redelivered)
MODIFIED_FAILED = 4; -> Abandon() which increases delivery count
MODIFIED_FAILED_UNDELIVERABLE = 5; -> Defer()

요약

이 개발자 가이드에서는 JMS(Java Message Service)를 사용하는 Java 클라이언트 애플리케이션이 Azure Service Bus와 연결하는 방법을 보여 줍니다.

다음 단계

Azure Service Bus에 대한 자세한 내용과 JMS(Java Message Service) 엔터티에 대한 자세한 내용은 다음 문서를 검사.