【Java.JMS】一個簡單的JMS例項
阿新 • • 發佈:2019-01-06
選擇ActiveMQ。
建立一個簡單的Maven工程,pom.xml如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gof</groupId> <artifactId>jms-test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>jms-test</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- Add by WXB --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-client</artifactId> <version>5.10.0</version> </dependency> </dependencies> </project>
建立測試類:
package com.gof.jms.test; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class SimpleMessageSendandReceiveApp { public static final String user = "system"; public static final String password = "manager"; public static final String url = "tcp://localhost:61616"; public static final String queueName = "test_queue"; public static final String messageBody = "Hello JMS!"; public static final boolean transacted = false; public static final boolean persistent = false; public static void main(String[] args){ Connection connection = null; Session session = null; try{ // create the connection ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(user, password, url); connection = connectionFactory.createConnection(); connection.start(); // create the session session = connection.createSession(transacted, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(queueName); // create the producer MessageProducer producer = session.createProducer(destination); if (persistent){ producer.setDeliveryMode(DeliveryMode.PERSISTENT); }else{ producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); } // create text message Message message = session.createTextMessage(messageBody); // send the message producer.send(message); System.out.println("Send message: " + ((TextMessage)message).getText()); // create the consumer MessageConsumer consumer = session.createConsumer(destination); // blocking till receive the message Message recvMessage = consumer.receive(); System.out.println("Receive message: " + ((TextMessage)recvMessage).getText()); }catch (Exception e){ e.printStackTrace(); }finally{ try{ // close session and connection if (session != null){ session.close(); } if (connection != null){ connection.close(); } }catch (Exception e){ e.printStackTrace(); } } } }<span style="font-family:SimSun;font-size:10px;"> </span>
開始測試:
啟動ActiveMQ,在admin頁面(http://localhost:8161/admin)中建立名為test_queue的Queue:
分步執行程式,當呼叫:
producer.send(message);
可以看到ActiveMQ接收到了這個訊息:
同時也可以看到該Queue當前的Active Producer:
當呼叫:
consumer.receive();
可以看到該訊息被消費掉:
在控制檯中,可以看到輸出的結果:
Send message: Hello JMS!
Receive message: Hello JMS!