有二种方式可以测试。
1. 透过testng, 在测试类中完成的jms服务器的启动与关闭。
a.初始化jms服务器
@BeforeClass(groups = "jms")
public void setupActiveMQ() throws Exception {
BrokerService broker = new BrokerService();
broker.setPersistent(false);
broker.setUseJmx(false);
broker.start();
URI uri = broker.getVmConnectorURI();
ConnectionFactory factory = new ActiveMQConnectionFactory(uri);
//String uri = "vm://localhost?broker.persistent=false";
//ConnectionFactory factory = new ActiveMQConnectionFactory(uri);
Connection connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("TestQueue@router1");
}
b. 运行测试类
@Test(groups = "jms")
public void sendMessage() throws JMSException {
TextMessage msg = session.createTextMessage();
msg.setText("hello");
session.createProducer(destination).send(msg);
}
c. 验证接收到的消息
@Test(groups = "jms", dependsOnMethods = "sendMessage", timeOut = 1000)
public void receiveMessage() throws JMSException {
MessageConsumer consumer = session.createConsumer(destination);
TextMessage msg = (TextMessage) consumer.receive();
assert "hello".equals(msg.getText());
}
2. 透过maven-activemq-plugin插件,运行jms服务器,然后分别实现发送与接收
a. maven 配置
<plugin> <groupId>org.apache.activemq.tooling</groupId> <artifactId>maven-activemq-plugin</artifactId> <version>5.2.0</version> <configuration> <configUri> xbean:file:src/main/resources/net/sunbeta/jms/activemq.xml </configUri> <fork>false</fork> <systemProperties> <property> <name>javax.net.ssl.keyStorePassword</name> <value>password</value> </property> <property> <name>org.apache.activemq.default.directory.prefix</name> <value>./target/</value> </property> </systemProperties> </configuration> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> <version>2.5.6</version> </dependency> <dependency> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-xbean</artifactId> <version>6.1.11</version> </dependency> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-activemq</artifactId> <version>1.1.0</version> </dependency> </dependencies> </plugin>
其中 activemq.xml 的配置为:
<?xml version="1.0"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="./data"> <!-- The transport connectors ActiveMQ will listen to --> <transportConnectors> <transportConnector name="openwire" uri="tcp://localhost:61616"/> </transportConnectors> </broker> </beans>
b.消息发送
public class JmsProducer {
private ConnectionFactory factory;
private Connection connection;
private Session session;
private MessageProducer producer;
public JmsProducer(ConnectionFactory factory, String queueName)
throws JMSException {
this.factory = factory;
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
producer = session.createProducer(destination);
}
public void run() throws JMSException {
for (int i = 0; i < 100; i++) {
System.out.println("Creating Message " + i);
Message message = session.createTextMessage("Hello World!");
producer.send(message);
}
}
public void close() throws JMSException {
if (connection != null) {
connection.close();
}
}
}
创建一个broker去调用它
public class JmsBroker {
public static String brokerURL = "tcp://localhost:61616";
// mvn clean compile exec:java
// -Dexec.mainClass=net.sunbeta.test.jms.JmsBroker
public static void main(String[] args) throws Exception {
// setup the connection to ActiveMQ
ConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
JmsProducer producer = new JmsProducer(factory, "test");
producer.run();
producer.close();
}
}
c. 消息接收
public class JmsConsumer implements MessageListener{
public static String brokerURL = "tcp://localhost:61616";
private ConnectionFactory factory;
private Connection connection;
private Session session;
private MessageConsumer consumer;
public static void main(String[] args) {
JmsConsumer app = new JmsConsumer();
app.run();
}
public void run() {
try {
ConnectionFactory factory = new ActiveMQConnectionFactory(brokerURL);
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("test");
consumer = session.createConsumer(destination);
consumer.setMessageListener(this);
} catch (Exception e) {
System.out.println("Caught:" + e);
e.printStackTrace();
}
}
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage txtMessage = (TextMessage) message;
System.out.println("Message received: " + txtMessage.getText());
} else {
System.out.println("Invalid message received.");
}
} catch (JMSException e) {
System.out.println("Caught:" + e);
e.printStackTrace();
}
}
OK !