1activeMq是apache的一个子项目,支持jms1.1和j2ee1.4,主要实现了一个队列,用于网络间消息传输
2下载apache actionmq
3下载后的目录
activemq-all-5.5.1.jar
bin
conf
data
docs
example
lib
LICENSE
NOTICE
README.txt
user-guide.html
webapps
WebConsole-README.txt
启动 mq,进入 bin目录,运行activemq.bat 文件,可以看到绑定的端口和侦听的端口,启动后访问地址
可以查看一些例子和查看控制台。这个时候,MQ的队列服务功能已经开启了。接下来需要编码实现
package com.mchz.mq.home; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class SendMessage { private static final String url = "tcp://localhost:61616";; private static final String QUEUE_NAME = "send.queue"; protected String expectedBody = "hello,word,172.16.4.106,hello,word," + "172.16.4.106,hello,word,172.16.4.106,hello,word,172.16.4.106," + "hello,word,172.16.4.106,hello,word,172.16.4.106,hello,word," + "172.16.4.106,hello,word,172.16.4.106,hello,word,172.16.4.106," + "hello,word,172.16.4.106,hello,word,172.16.4.106,hello,word," + "172.16.4.106,hello,word,172.16.4.106,hello,word,172.16.4.106," + "hello,word,172.16.4.106,hello,word,172.16.4.106,hello,word," + "172.16.4.106,hello,word,172.16.4.106,hello,word,172.16.4.106," + "hello,word,172.16.4.106,hello,word,172.16.4.106,"; public void sendMessage() throws JMSException { Connection connection = null; Session session = null; try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( url); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(QUEUE_NAME); MessageProducer producer = session.createProducer(destination); TextMessage message = session.createTextMessage(expectedBody); message.setStringProperty("ipaddress", "172.16.4.106"); message.setStringProperty("address", "zj.hz.mc.219"); producer.send(message); } catch (Exception e) { e.printStackTrace(); } finally { session.close(); connection.close(); } } public static void main(String[] args) { SendMessage send = new SendMessage(); long startTime=System.currentTimeMillis(); try { for (int i = 0; i < 100000; i++) { send.sendMessage(); // System.out.println(i); } } catch (JMSException e) { e.printStackTrace(); long endTime=System.currentTimeMillis(); System.out.println(endTime-startTime); } long endTime=System.currentTimeMillis(); System.out.println(endTime-startTime); } }
package com.mchz.mq.home; import javax.jms.Connection; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.Message; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class ReceiveMessage { private static final String url = "tcp://localhost:61616"; private static final String QUEUE_NAME = "send.queue"; public void receiveMessage() { Connection connection = null; try { try { ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( url); connection = connectionFactory.createConnection(); } catch (Exception e) { e.printStackTrace(); } connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(QUEUE_NAME); MessageConsumer consumer = session.createConsumer(destination); consumeMessagesAndClose(connection, session, consumer); } catch (Exception e) { e.printStackTrace(); } } protected void consumeMessagesAndClose(Connection connection, Session session, MessageConsumer consumer) throws JMSException { for (int i = 0; i < 16349;i++) { Message message = consumer.receive(1000); if (message != null) { onMessage(message); } } System.out.println("Closing connection"); consumer.close(); session.close(); connection.close(); } public void onMessage(Message message) { System.out.println("come in onMessage....."); try { if (message instanceof TextMessage) { TextMessage txtMsg = (TextMessage) message; String msg = txtMsg.getText(); System.out.println("Received: " + msg); } } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { ReceiveMessage rm = new ReceiveMessage(); rm.receiveMessage(); } }
一个用与发送消息,一个用于接收消息,先运行发送消息的类SendMessage ,然后查看MQ的控制 http://localhost:8161/admin/queues.jsp
可以看到自己往队列里面放的消息,接下来运行接收的类ReceiveMessage ,在刷新控制台,可以看到消息被接收。
另外,MQ还可以把一个队列里面的消息发送到另一个队列。