BLOG ARTICLE JMS MessageSelector | 1 ARTICLE FOUND

  1. 2008/09/29 JMS Message Selector Sample

Requestor.java -- EAI를 사용할 때 필요합니다.

package com.jboss.jms.client;

import java.util.Hashtable;
import java.util.UUID;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Requestor {

 private String requestQueueName = "/queue/A";
 private String replyQueueName = "/queue/B";
 private MessageConsumer replyConsumer;
 Context ic = null;

 public void send() throws Exception {

 
  ConnectionFactory cf = null;
  Connection connection = null;

  try {
   // ic = new InitialContext();
   ic = getInitialContext();

   cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");

   // Request Queue Setting
   Queue queue = (Queue) ic.lookup(requestQueueName);
   System.out.println("Queue " + requestQueueName + " exists");

   // ReplyQueue Lookup
   Destination replyQueue = (Destination) ic.lookup(replyQueueName);

   // Connect Create
   connection = cf.createConnection();
   connection.start();

   // Session Create
   Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
   MessageProducer sender = session.createProducer(queue);

   TextMessage message = session.createTextMessage("Choi Ji-Woong");

   // Message property setting for reply
   message.setJMSReplyTo(replyQueue);
   String uuid = (UUID.randomUUID()).toString();/*
                * generate a unique
                * id
                */
   message.setJMSCorrelationID(uuid);

   // Send message
   sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  // sender.setTimeToLive(10000);
   sender.send(message);
   System.out.println("The message was successfully sent to the "
     + queue.getQueueName() + " queue");

   System.out.println("Sent request");
   System.out.println("\tTime:       " + System.currentTimeMillis()
     + " ms");
   System.out.println("\tMessage ID: " + message.getJMSMessageID());
   System.out
     .println("\tCorrel. ID: " + message.getJMSCorrelationID());
   System.out.println("\tReply to:   " + message.getJMSReplyTo());
   System.out.println("\tContents:   " + message.getText());

   // Wait Reply Message from Reply Queue
   replyConsumer = session.createConsumer(replyQueue, "JMSCorrelationID = '" + uuid + "'");
   System.out.println("\tMessage Selector : " + replyConsumer.getMessageSelector());
   Message msg = replyConsumer.receive(10000); // wait reply message for 5 seconds

   if (msg instanceof TextMessage) {
    TextMessage replyMessage = (TextMessage) msg;
    System.out.println("Received reply ");
    System.out.println("\tTime:       "
      + System.currentTimeMillis() + " ms");
    System.out.println("\tMessage ID: "
      + replyMessage.getJMSMessageID());
    System.out.println("\tCorrel. ID: "
      + replyMessage.getJMSCorrelationID());
    System.out.println("\tReply to:   "
      + replyMessage.getJMSReplyTo());
    System.out.println("\tContents:   " + replyMessage.getText());
   }
  } finally {
   if (ic != null) {
    try {
     ic.close();
    } catch (Exception e) {
     throw e;
    }
   }

   // ALWAYS close your connection in a finally block to avoid leaks.
   // Closing connection also takes care of closing its related objects
   // e.g. sessions.
   closeConnection(connection);
  }
 }

 private Context getInitialContext() {
  try {
   Hashtable<Object, String> env = new Hashtable<Object, String>();

   env.put(Context.INITIAL_CONTEXT_FACTORY,
     "org.jnp.interfaces.NamingContextFactory");
   env.put(Context.PROVIDER_URL, "localhost:1199");

   Context ctx = new InitialContext(env);
   return ctx;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 private void closeConnection(Connection con) {
  try {
   if (con != null) {
    con.close();
   }
  } catch (JMSException jmse) {
   System.out.println("Could not close connection " + con
     + " exception was " + jmse);
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  new Requestor().send();
 }
}




Replier.java

package com.jboss.jms.client;

import java.util.Hashtable;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;

public class Replier implements MessageListener {
 private String requestQueueName = "/queue/A";
 private Session session;
 private boolean quit = false;
 Context ic = null;

 public void waitMessage() throws Exception {

 
  ConnectionFactory cf = null;
  Connection connection = null;
 
  try {
   // ic = new InitialContext();
   ic = getInitialContext();

   cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");
   // Connect Create
   connection = cf.createConnection();

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

   // Request Queue Setting
   Queue queue = (Queue) ic.lookup(requestQueueName);
   System.out.println("Queue " + requestQueueName + " exists");

   MessageConsumer consumer = session.createConsumer(queue);
   consumer.setMessageListener(this);
   connection.start();

  } catch (Exception ex) {
   if (ic != null) {
    try {
     ic.close();
    } catch (Exception e) {
     throw e;
    }
   }

   // ALWAYS close your connection in a finally block to avoid leaks.
   // Closing connection also takes care of closing its related objects
   // e.g. sessions.
   closeConnection(connection);
  }
 }

 public void onMessage(Message message) {
  try {
   if ((message instanceof TextMessage)
     && (message.getJMSReplyTo() != null)) {
    TextMessage requestMessage = (TextMessage) message;

    System.out.println("Received request");
    System.out.println("\tTime:       "
      + System.currentTimeMillis() + " ms");
    System.out.println("\tMessage ID: "
      + requestMessage.getJMSMessageID());
    System.out.println("\tCorrel. ID: "
      + requestMessage.getJMSCorrelationID());
    System.out.println("\tReply to:   "
      + requestMessage.getJMSReplyTo());
    System.out.println("\tRecv Contents:   "
      + requestMessage.getText());

    String contents = requestMessage.getText() + ", Nice to meet you! ";
   
    Destination replyDestination = message.getJMSReplyTo();
    System.out.println("\tDestination : " + ((Queue)replyDestination).getQueueName());
   
    Queue replyQueue = (Queue) ic.lookup("/queue/B");
    MessageProducer replyProducer = session.createProducer(replyQueue);

    TextMessage replyMessage = session.createTextMessage();
    replyMessage.setText(contents);
    replyMessage.setJMSCorrelationID(requestMessage
      .getJMSCorrelationID());
    replyProducer.send(replyMessage);

    System.out.println("Sent reply");
    System.out.println("\tTime:       "
      + System.currentTimeMillis() + " ms");
    System.out.println("\tMessage ID: "
      + replyMessage.getJMSMessageID());
    System.out.println("\tCorrel. ID: "
      + replyMessage.getJMSCorrelationID());
    System.out.println("\tReply to:   "
      + replyMessage.getJMSReplyTo());
    System.out.println("\tContents:   " + replyMessage.getText());
   
    if (contents.equalsIgnoreCase("quit")) {
     synchronized (this) {
      quit = true;
      this.notifyAll(); // Notify main thread to quit
     }
    }
   }
   
  } catch (Exception e) {
   e.printStackTrace();
  }

 }

 private Context getInitialContext() {
  try {
   Hashtable<Object, String> env = new Hashtable<Object, String>();

   env.put(Context.INITIAL_CONTEXT_FACTORY,
     "org.jnp.interfaces.NamingContextFactory");
   env.put(Context.PROVIDER_URL, "localhost:1199");

   Context ctx = new InitialContext(env);
   return ctx;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

 private void closeConnection(Connection con) {
  try {
   if (con != null) {
    con.close();
   }
  } catch (JMSException jmse) {
   System.out.println("Could not close connection " + con
     + " exception was " + jmse);
  }
 }

 /**
  * @param args
  */
 public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  Replier replier = new Replier();
  replier.waitMessage();
  System.out
    .println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");

  // Wait until a "quit" message has been received.
  synchronized (replier) {
   while (!replier.quit) {
    try {
     replier.wait();
    } catch (InterruptedException ie) {
    }
   }
  }

 }
}



크리에이티브 커먼즈 라이센스
Creative Commons License
2008/09/29 22:40 2008/09/29 22:40