본 문서에서는 널리 사용되는 JMS(Java 메시지 서비스) 2.0 API를 사용하여 AMQP(Advanced Message Queueing Protocol) 1.0 프로토콜을 거쳐 Azure Service Bus와 상호작용하는 방법을 설명합니다.
중요 참고 사항
다음은 몇 가지 중요한 사항입니다.
- JMS 2.0 API에 대한 지원은 프리미엄 계층 및 azure-servicebus-jms 라이브러리를 사용하는 경우에만 사용할 수 있습니다.
- 프리미엄 네임스페이스에서 azure-servicebus-jms (예: 최신 qpid-jms-client) 이외의 JMS 라이브러리를 사용하는 경우 JMS 1.1 동작을 관찰하게 되며, 일부 JMS 2.0 기능이 예상대로 작동하지 않을 수 있습니다. azure-servicebus-jms 라이브러리는 qpid-jms-client에 대한 종속성을 계속 사용하기 때문에 어떤 종류의 공급업체 잠금도 만들지 않습니다. qpid-jms-client에서 작동하는 모든 API는 azure-servicebus-jms 라이브러리에서도 작동합니다.
- azure-servicebus-jms는 오픈 소스 라이브러리이기도 합니다. Azure-servicebus-jms 라이브러리는 Service Bus 서비스가 프리미엄 네임스페이스에 대해 작업할 때 JMS 1.1 동작(이전 버전과의 호환성)과 JMS 2.0 동작이 필요한 고객을 구분할 수 있도록 주로 만들어졌습니다. 또한 azure-servicebus-jms 라이브러리는 프리페치 정책 값, 다시 연결 정책, Microsoft Entra ID, 관리 ID 지원, 엔터티에 대한 유휴 상태의 자동 삭제 지원과 같은 몇 가지 필요한 기본값을 제공합니다.
- azure-servicebus-jms 패키지에 대한 다음 경로는 Jakarta 메시징 사양(Jakarta.* API)을 기반으로 하는 최신 버전의 라이브러리입니다. Maven Central: com.azure:azure-servicebus-jms. 또한 azure-servicebus-jms에 대한 다음 경로는 Jakarta 메시징 사양(javax.* API) 이전의 최신 라이브러리 버전입니다. Maven Central: com.microsoft.azure:azure-servicebus-jms.
필수 조건
Service Bus 시작
본 가이드에서는 자신에게 이미 Service Bus 네임스페이스가 있는 것으로 가정합니다. 아직 없는 경우 Azure Portal을 사용하여 네임스페이스 및 큐를 만듭니다. Service Bus 네임스페이스와 큐를 만드는 방법에 대한 자세한 내용은 Azure Portal을 통하여 Service Bus 큐 시작하기를 참조하세요.
Java 개발 환경 설정하기
Java 애플리케이션을 개발하려면 적절한 개발 환경을 설정하여야 합니다.
- JDK(Java 개발 키트)나 JRE(Java Runtime Environment)를 설치합니다.
- JDK나 JRE를 빌드 경로 및 적절한 시스템 변수에 추가합니다.
- JDK나 JRE를 활용하기 위하여 Java IDE를 설치합니다. 예를 들면, Eclipse나 IntelliJ가 있습니다.
Azure에서 Java용 개발자 환경을 준비하는 방법에 대한 자세한 내용은, 본 가이드를 활용하세요.
JMS 기능 중에는 어떤 것들을 지원하나요?
다음 표에는 Azure Service Bus가 현재 지원하는 JMS(Java Message Service) 기능이 나와 있습니다. 지원되지 않는 기능도 표시됩니다.
기능 | 응용 프로그램 인터페이스 (API) | 상태 |
---|---|---|
큐 |
|
지원됨 |
토픽 |
|
지원됨 |
임시 큐 |
|
지원됨 |
임시 항목 |
|
지원됨 |
메시지 생산자 / JMSProducer |
|
지원됨 |
큐 브라우저 |
|
지원됨 |
메시지 소비자/ JMSConsumer |
noLocal은 현재 지원되지 않습니다. |
지원됨 |
공유되는 지속형 구독 |
|
지원됨 |
공유되지 않는 지속형 구독 |
noLocal은 현재 지원되지 않으므로 false로 설정해야 합니다. |
지원됨 |
공유되는 비지속형 구독 |
|
지원됨 |
공유되지 않는 비지속형 구독 |
noLocal은 현재 지원되지 않으므로 false로 설정해야 합니다. |
지원됨 |
메시지 선택기 | 소비자가 만든 것에 따라 달라집니다. Service Bus 선택기는 "LIKE" 및 "BETWEEN" SQL 키워드를 지원하지 않습니다. | 지원됨 |
전달 지연(예약된 메시지) |
|
지원됨 |
생성된 메시지 |
|
지원됨 |
엔터티 간 트랜잭션 |
|
지원됨 |
분산 트랜잭션 | 지원되지 않음 |
JMS(Java 메시지 서비스) 클라이언트 라이브러리 다운로드하기
프리미엄 계층에서 사용할 수 있는 모든 기능을 활용하려면 프로젝트의 빌드 경로에 다음 라이브러리를 추가합니다. azure-servicebus-jms. 이 패키지는 프리페치 정책 값, 다시 연결 정책, Microsoft Entra ID 및 관리 ID 지원과 같은 몇 가지 필요한 기본값을 기본적으로 제공합니다.
참고 항목
빌드 경로에 azure-servicebus-jms를 추가하려면 Maven이나 Gradle 같은 프로젝트용 기본 종속성 관리 도구를 사용합니다.
Java 애플리케이션 코딩
종속성을 가져온 뒤에는 Java 애플리케이션을 JMS 공급자에 관계없이 작성할 수 있습니다.
JMS를 사용하여 Azure Service Bus에 연결하기
JMS 클라이언트를 사용하여 Azure Service Bus에 연결하려면 기본 연결 문자열에 Azure Portal 내의 ‘공유된 액세스 정책’에 사용할 수 있는 연결 문자열이 필요합니다.
ServiceBusJmsConnectionFactorySettings
를 인스턴스화합니다.ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings(); connFactorySettings.setConnectionIdleTimeoutMS(20000);
적절한
ServiceBusJmsConnectionFactory
을 통하여ServiceBusConnectionString
를 인스턴스화합니다.String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>"; ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
ConnectionFactory
를 사용하여Connection
과Session
을 순서대로 만들거나Connection connection = factory.createConnection(); Session session = connection.createSession();
JMSContext
(JMS 2.0 클라이언트용)를 만듭니다.JMSContext jmsContext = factory.createContext();
중요합니다
이름은 비슷하지만 JMS '세션'과 Service Bus '세션'은 서로 완전히 독립적입니다.
JMS 1.1의 Session은
MessageProducer
,MessageConsumer
및Message
자체를 만들 수 있도록 하는 API의 필수적인 빌드 블록입니다. 자세한 내용은 JMS API 프로그래밍 모델을 검토하세요.Service Bus의 세션은 큐와 구독에서 FIFO 처리를 사용하도록 하는 서비스 및 클라이언트 측 구문입니다.
JMS 애플리케이션 작성
Session
또는 JMSContext
가 인스턴스화되면 애플리케이션이 익숙한 JMS API를 이용하여 관리 작업과 데이터 작업을 모두 수행할 수 있습니다. 지원하는 API를 확인하려면 지원되는 JMS 기능 목록을 참조하세요. 다음은 JMS를 시작하는 몇 가지 샘플 코드 조각입니다.
큐와 토픽에 메시지 보내기
// Create the queue and topic
Queue queue = jmsContext.createQueue("basicQueue");
Topic topic = jmsContext.createTopic("basicTopic");
// Create the message
Message msg = jmsContext.createMessage();
// Create the JMS message producer
JMSProducer producer = jmsContext.createProducer();
// send the message to the queue
producer.send(queue, msg);
// send the message to the topic
producer.send(topic, msg);
큐에서 온 메시지 받기
// Create the queue
Queue queue = jmsContext.createQueue("basicQueue");
// Create the message consumer
JMSConsumer consumer = jmsContext.createConsumer(queue);
// Receive the message
Message msg = (Message) consumer.receive();
토픽에 대하여 공유 지속성 구독에서 온 메시지 받기
// Create the topic
Topic topic = jmsContext.createTopic("basicTopic");
// Create a shared durable subscriber on the topic
JMSConsumer sharedDurableConsumer = jmsContext.createSharedDurableConsumer(topic, "sharedDurableConsumer");
// Receive the message
Message msg = (Message) sharedDurableConsumer.receive();
요약
본 가이드는 AMQP 1.0을 통하여 JMS(Java 메시지 서비스)를 이용하는 Java 클라이언트 애플리케이션이 Azure Service Bus와 상호작용하는 방법을 보여 줍니다.
.NET, C, Python, PHP 등의 다른 언어에서도 Service Bus AMQP 1.0을 사용할 수 있습니다. 이러한 언어로 빌드한 구성 요소는 Service Bus의 AMQP 1.0 지원을 사용하여 안정적이며 완전히 신뢰할 수 있는 상태로 메시지를 교환할 수 있습니다.