Azure Service Bus 프리미엄에서 Java 메시지 서비스 2.0 API 사용

본 문서에서는 널리 사용되는 JMS(Java 메시지 서비스) 2.0 API를 사용하여 AMQP(Advanced Message Queueing Protocol) 1.0 프로토콜을 거쳐 Azure Service Bus와 상호작용하는 방법을 설명합니다.

참고 항목

JMS(Java 메시지 서비스) 2.0 API는 프리미엄 계층에서만 사용할 수 있습니다.>

필수 구성 요소

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 상태
  • JMSContext.createQueue(문자열 queueName)
지원됨
토픽
  • JMSContext.createTopic(문자열 topicName)
지원됨
임시 큐
  • JMSContext.createTemporaryQueue()
지원됨
임시 항목
  • JMSContext.createTemporaryTopic()
지원됨
메시지 생산자 /
JMSProducer
  • JMSContext.createProducer()
지원됨
큐 브라우저
  • JMSContext.createBrowser(Queue 큐)
  • JMSContext.createBrowser(Queue 큐, 문자열 messageSelector)
지원됨
메시지 소비자/
JMSConsumer
  • JMSContext.createConsumer(Destination 대상)
  • JMSContext.createConsumer(Destination 대상, 문자열 messageSelector)
  • JMSContext.createConsumer(Destination 대상, 문자열 messageSelector, 부울 noLocal)

noLocal은 현재 지원되지 않습니다.
지원됨
공유되는 지속형 구독
  • JMSContext.createSharedDurableConsumer(Topic 항목, 문자열 이름)
  • JMSContext.createSharedDurableConsumer(Topic 항목, 문자열 이름, 문자열 messageSelector)
지원됨
공유되지 않는 지속형 구독
  • JMSContext.createDurableConsumer(Topic 항목, 문자열 이름)
  • createDurableConsumer(Topic 항목, 문자열 이름, 문자열 messageSelector, 부울 noLocal)

noLocal은 현재 지원되지 않으므로 false로 설정해야 합니다.
지원됨
공유되는 비지속형 구독
  • JMSContext.createSharedConsumer(Topic 항목, 문자열 sharedSubscriptionName)
  • JMSContext.createSharedConsumer(Topic 항목, 문자열 sharedSubscriptionName, 문자열 messageSelector)
지원됨
공유되지 않는 비지속형 구독
  • JMSContext.createConsumer(Destination 대상)
  • JMSContext.createConsumer(Destination 대상, 문자열 messageSelector)
  • JMSContext.createConsumer(Destination 대상, 문자열 messageSelector, 부울 noLocal)

noLocal은 현재 지원되지 않으므로 false로 설정해야 합니다.
지원됨
메시지 선택기 만든 소비자에 따라 다릅니다. 지원됨
전달 지연(예약된 메시지)
  • JMSProducer.setDeliveryDelay(긴 전달 지연)
지원됨
생성된 메시지
  • JMSContext.createMessage()
  • JMSContext.createBytesMessage()
  • JMSContext.createMapMessage()
  • JMSContext.createObjectMessage(직렬화 가능 개체)
  • JMSContext.createStreamMessage()
  • JMSContext.createTextMessage()
  • JMSContext.createTextMessage(문자열 텍스트)
지원됨
엔터티 간 트랜잭션
  • Connection.createSession(true, Session.SESSION_TRANSACTED)
지원됨
분산 트랜잭션 지원되지 않음

JMS(Java 메시지 서비스) 클라이언트 라이브러리 다운로드하기

프리미엄 계층에서 사용할 수 있는 모든 기능을 활용하려면 프로젝트의 빌드 경로에 다음 라이브러리를 추가합니다.

Azure-servicebus-jms

참고 항목

빌드 경로에 Azure-servicebus-jms를 추가하려면 Maven이나 Gradle 같은 프로젝트용 기본 종속성 관리 도구를 사용합니다.

Java 애플리케이션 코딩

종속성을 가져온 뒤에는 Java 애플리케이션을 JMS 공급자에 관계 없이 작성할 수 있습니다.

JMS를 사용하여 Azure Service Bus에 연결하기

JMS 클라이언트를 사용하여 Azure Service Bus에 연결하려면 기본 연결 문자열Azure Portal 내의 ‘공유된 액세스 정책’에 사용할 수 있는 연결 문자열이 필요합니다.

  1. ServiceBusJmsConnectionFactorySettings를 인스턴스화합니다.

    ServiceBusJmsConnectionFactorySettings connFactorySettings = new ServiceBusJmsConnectionFactorySettings();
    connFactorySettings.setConnectionIdleTimeoutMS(20000);
    
  2. 적절한 ServiceBusConnectionString을 통하여 ServiceBusJmsConnectionFactory를 인스턴스화합니다.

    String ServiceBusConnectionString = "<SERVICE_BUS_CONNECTION_STRING_WITH_MANAGE_PERMISSIONS>";
    ConnectionFactory factory = new ServiceBusJmsConnectionFactory(ServiceBusConnectionString, connFactorySettings);
    
  3. ConnectionFactory를 사용하여 ConnectionSession을 순서대로 만들거나

    Connection connection = factory.createConnection();
    Session session = connection.createSession();
    

    JMSContext(JMS 2.0 클라이언트용)를 만듭니다.

    JMSContext jmsContext = factory.createContext();
    

    Important

    이름은 비슷하지만 JMS '세션'과 Service Bus '세션'은 서로 완전히 독립적입니다.

    JMS 1.1의 Session은 MessageProducer, MessageConsumerMessage 자체를 만들 수 있도록 하는 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 지원을 사용하여 안정적이며 완전히 신뢰할 수 있는 상태로 메시지를 교환할 수 있습니다.

다음 단계

Azure Service Bus에 대한 자세한 내용과 JMS(Java Message Service) 엔터티 관련 세부 정보는 다음 링크를 확인하세요.