MessagePublisher
package jms.activemq.myexample;
import java.util.Date;
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessagePublisher implements Runnable {
private String url;
private String user;
private String password;
private String topicName;
public MessagePublisher(String topicName, String url, String user,
String password) {
this.url = url;
this.user = user;
this.password = password;
this.topicName = topicName;
}
@Override
public void run() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
Session session = null;
MessageProducer sendPublisher;
Connection connection = null;
int messageCount = 0;
try {
connection = connectionFactory.createConnection();
connection.start();
//创建Topic
//Topic topic = new ActiveMQTopic(this.topicName);
session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(this.topicName);
sendPublisher = session.createProducer(topic);
while (true) {
String text = new Date() + "现在发送是第" + messageCount + "条消息";
sendPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sendPublisher.send(session.createTextMessage(text));
if ((++messageCount) == 3) {
// 发够十条消息退出
break;
}
Thread.sleep(1000);
}
//sendPublisher.close();
//connection.close();
System.out.println("发布消息线程结束!!!!!!!!!!!!!!!!!!!!!!!!");
} catch (JMSException e) {
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTopic() {
return topicName;
}
}
MessageSubscriber
package jms.activemq.myexample;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MessageSubscriber implements Runnable {
private String url;
private String user;
private String password;
private String topicName;
public MessageSubscriber(String topicName, String url, String user,
String password) {
this.url = url;
this.user = user;
this.password = password;
this.topicName = topicName;
}
@Override
public void run() {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
user, password, url);
Session session = null;
MessageConsumer subscriber;
Connection connection = null;
try {
connection = connectionFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建Topic
Topic topic = session.createTopic(this.topicName);
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
subscriber = session.createConsumer(topic);
subscriber.setMessageListener(new TextListener());
connection.start();
System.out.println(Thread.currentThread().getName() + "开启");
// connection.close();
} catch (JMSException e) {
if (connection != null) {
try {
connection.close();
} catch (JMSException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTopic() {
return topicName;
}
}
TextListener
package jms.activemq.myexample;
import javax.jms.*;
/**
* Text消息监听
*
* @author XXXX
*
*/
public class TextListener implements MessageListener {
/**
* Casts the message to a TextMessage and displays its text.
*
* @param message
* the incoming message
*/
public void onMessage(Message message) {
TextMessage msg = null;
try {
if (message instanceof TextMessage) {
msg = (TextMessage) message;
System.out.println("Reading message: " + msg.getText());
} else {
System.out.println("Message of wrong type: "
+ message.getClass().getName());
}
} catch (JMSException e) {
System.out.println("JMSException in onMessage(): " + e.toString());
} catch (Throwable t) {
System.out.println("Exception in onMessage():" + t.getMessage());
}
}
}
MyActiveMQDemo
package jms.activemq.myexample;
import javax.jms.JMSException;
public class MyActiveMQDemo {
public static void main(String[] args) throws InterruptedException, JMSException {
String url = "tcp://localhost:61616";
String user = null;
String password = null;
String query = "MyQueueA";
String topic = "TestTopic";
// new Thread(new MessageSender(query,url,user,password), "Name-Sender").start();
// new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver1").start();
// new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver2").start();
// new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver3").start();
// new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver4").start();
// new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver5").start();
new Thread(new MessageSubscriber(topic,url,user,password), "Name-Subscriber1").start();
new Thread(new MessageSubscriber(topic,url,user,password), "Name-Subscriber2").start();
new Thread(new MessageSubscriber(topic,url,user,password), "Name-Subscriber3").start();
new Thread(new MessageSubscriber(topic,url,user,password), "Name-Subscriber4").start();
new Thread(new MessageSubscriber(topic,url,user,password), "Name-Subscriber5").start();
Thread.sleep(5000);
new Thread(new MessagePublisher(topic,url,user,password), "Name-Publisher").start();
//new TopicPublisher().run();
}
}