2014-02-26 4 views
1

저는 JMS에 익숙하지 않고 Active MQ Hello world의 예를 통해 설명합니다. 난 DB에서 직원 테이블에서 항목 을 할 때마다 내가 시나리오를 말해봐, 내가 queue.here에서 메시지를 넣어야 할 것은 내 질문에JMS 대기열에 메시지 게시?

public static class HelloWorldProducer { 
     public void createMessageOnQueue() { 
      try { 
       // Create a ConnectionFactory 
       ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost"); 

       // Create a Connection 
       Connection connection = connectionFactory.createConnection(); 
       connection.start(); 

       // Create a Session 
       Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 

       // Create the destination (Topic or Queue) 
       Destination destination = session.createQueue("TEST.FOO"); 

       // Create a MessageProducer from the Session to the Topic or Queue 
       MessageProducer producer = session.createProducer(destination); 
       producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 

       // Create a messages 
       String text = "Hello world! From: " + Thread.currentThread().getName() + " : " + this.hashCode(); 
       TextMessage message = session.createTextMessage(text); 

       // Tell the producer to send the message 
       System.out.println("Sent message: "+ message.hashCode() + " : " + Thread.currentThread().getName()); 
       producer.send(message); 

       // Clean up 
       session.close(); 
       connection.close(); 
      } 
      catch (Exception e) { 
       System.out.println("Caught: " + e); 
       e.printStackTrace(); 
      } 
     } 
    } 

이제 세계 예 안녕하세요 생산자 코드 내가를 닫을 경우입니다 연결 및 세션, 그것은 또한 대기열을 닫을 것인가? 그렇다면 메시지가 아직 소비되지 않았다면 어떻게됩니까?

두 번째 질문은 두 번째로 같은 대기열 (예 : 'TEST.FOO')에 메시지를 게시해야 할 경우 createMessageOnQueue 메쏘드를 다시 호출해야하는지입니다. 예인 경우 새 큐를 생성하지 않습니다. session.createQueue("TEST.FOO")?

답변

0

이제 내 질문에 내가 연결 및 세션을 닫으면 대기열도 닫힙니 까? 그렇다면 메시지가 아직 소비되지 않았다면 어떻게 될까요?

메시지는 여전히 대기열에 있습니다. '대기열 닫기'와 같은 것은 없습니다. 내가, 같은 큐 (즉 "TEST.FOO") 두 번째 시간에 메시지를 게시해야 내가 createMessageOnQueue 방법 두 번 호출해야 할 경우

두 번째 질문입니다. 그렇다면 session.createQueue ("TEST.FOO")와 함께 새 대기열을 만들지 않습니까?

session.createQueue ("TEST.FOO")는 반드시 대기열을 만들지는 않으며 기존 대기열에 대한 참조 만 가져옵니다. 이 방법은 단순히 주제의 이름을 캡슐화하는 객체를 생성하는 세션 #의 createQueue()

참고

의 javadoc. JMS 제공자에 실제 항목을 작성하지 않습니다. JMS는 실제 주제를 생성하는 메소드 인 을 제공하지 않습니다. 특정 JMS 제공자에만 해당되기 때문입니다. 실제 항목을 만드는 것은 공급자마다 다르며 일반적으로 관리자가 수행하는 관리 작업입니다. 그러나 일부 공급자는 필요할 때 자동으로 을 만들 수 있습니다.

0

큐는 한 번만 생성되며 수동으로 삭제할 수 있습니다. 메시지가 대기열로 보내지면 메시지가 소비 될 때까지 대기열에서 대기합니다 (주제와 다름).

두 번 보내려는 경우 메시지를 다시 만들 필요가 없습니다. 그런데 왜 다시 2 번이나 보내겠습니까?

JMS 트랜잭션을 사용하여 문제점을 해결할 수 있다고 생각합니다.

관련 문제