Java Message Service (JMS) 實現異步消息傳遞,極大簡化企業級異步通訊系統開發,消息模式保持系統鬆散耦合。
TextMessage - 字串MapMessage - 鍵值對BytesMessage - 位元組流StreamMessage - Java 基本類型流ObjectMessage - 可序列化物件Context ctx = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactoryTest");
QueueConnection conn = factory.createQueueConnection();
QueueSession session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("QueueTest");
QueueSender sender = session.createSender(queue);
TextMessage msg = session.createTextMessage("Hello JMS!");
sender.send(msg);
conn.close();
Context ctx = new InitialContext();
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactoryTest");
QueueConnection conn = factory.createQueueConnection();
QueueSession session = conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = (Queue) ctx.lookup("QueueTest");
QueueReceiver receiver = session.createReceiver(queue);
conn.start();
while (true) {
Message m = receiver.receive();
if (m instanceof TextMessage) {
System.out.println("Reading: " + ((TextMessage)m).getText());
} else break;
}
conn.close();
TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("TopicConnectionFactoryTest");
TopicConnection conn = factory.createTopicConnection();
TopicSession session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) ctx.lookup("TopicTest");
TopicPublisher publisher = session.createPublisher(topic);
TextMessage msg = session.createTextMessage("Message " + i);
publisher.publish(msg);
conn.close();
TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("TopicConnectionFactoryTest");
TopicConnection conn = factory.createTopicConnection();
TopicSession session = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = (Topic) ctx.lookup("TopicTest");
TopicSubscriber subscriber = session.createSubscriber(topic, null, true); // true = noLocal
conn.start();
TextMessage msg = (TextMessage) subscriber.receive();
System.out.println("Received: " + msg.getText());
conn.close();
ConnectionFactory 建立 Connection。Connection 建立 Session。send/publish,接收端使用 receive/receiveNoWait(繼承自 MessageConsumer)。onMessage,更符合 J2EE 規範。