本篇文章从代码角度去实现一个mq。因为ActiveMQ是对JMS的一种实现,因此,AMQ的开发步骤就应该和JMS的开发模型一样。
1. 创建ConnectionFactory
2. 创建Connection
3. 创建Session
4. 创建Destination/Topic
5. 创建Producer/Consumer
package com.zhuyang.mq.p2p;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Producer {
// default connection username
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
// default connection password
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
// default connection url
private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) {
ConnectionFactory cf = null;
Connection connection = null;
// session used to revieve or send
Session session = null;
// message destination
Destination destination = null;
MessageProducer messageProducer = null;
// create ConnectionFactory
try {
cf = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKERURL);
// create activemq connection
connection = cf.createConnection();
connection.start();
// create session
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// create a queue name= helloworld
destination = session.createQueue("helloworld");
// create MessageProducer
messageProducer = session.createProducer(destination);
for (int i = 0; i < 10; i++) {
TextMessage msg = session.createTextMessage("hello" + i);
messageProducer.send(msg);
}
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
connection.close();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行完后active mq控制台会显示出创建的Queue"helloworld"
package com.zhuyang.mq.p2p;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer {
// default connection username
private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
// default connection password
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
// default connection url
private static final String BROKERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) {
ConnectionFactory cf = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer messageConsumer;
try {
cf = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKERURL);
connection = cf.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("helloworld");
messageConsumer = session.createConsumer(destination);
while (true) {
TextMessage msg = (TextMessage) messageConsumer.receive(100000);
if (msg != null) {
System.out.println("message recieved:" + msg.getText());
} else {
break;
}
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Consumer执行完后
message recieved:hello0
message recieved:hello1
message recieved:hello2
message recieved:hello3
message recieved:hello4
message recieved:hello5
message recieved:hello6
message recieved:hello7
message recieved:hello8
message recieved:hello9