下面咱們就來說說怎麼創建發佈–訂閱消息. 發佈消息和訂閱消息其實很簡單, 基本上合創建隊列是一樣的. 不一樣的地方就是把創建的隊列的修改成創建主題就行了. 其他的都是一樣的. 這裏我會使用註冊監聽器的方式接收消息.
創建兩個監聽器 模擬兩個用戶訂閱這個消息
package com.zero.activemq2;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* 實現messageListener接口
* 第一個監聽器
* @author samuel
*
*/
public class Listener1 implements MessageListener {
/**
* 傳輸的消息
*/
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
String msg = txtMsg.getText();
System.out.println("Received__01: " + msg);
} else {
System.out.println("this is error");
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
// 第二個監聽器
package com.zero.activemq2;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
* 實現messageListener接口
* 第二個監聽器
* @author samuel
*
*/
public class Listener2 implements MessageListener {
/**
* 傳輸的消息
*/
public void onMessage(Message message) {
try {
if (message instanceof TextMessage) {
TextMessage txtMsg = (TextMessage) message;
String msg = txtMsg.getText();
System.out.println("Received: __02" + msg);
} else {
System.out.println("this is error");
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
創建一個發佈者的類
package com.zero.activemq2;
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;
/**
* 發佈消息
* @author samuel
*
*/
public class Publisher {
private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageProducer messageProducer;
connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// 創建主題
destination = session.createTopic("firstTopic");
messageProducer = session.createProducer(destination);
sendMessage(session, messageProducer);
session.commit();
connection.close();
}
/**
* 發送信息
* @param session JMS的Session對象
* @param messageProducer 消息發佈者對象
* @throws JMSException
*/
private static void sendMessage(Session session, MessageProducer messageProducer) throws JMSException {
for (int i = 0; i < 10; i++) {
TextMessage textMessage = session.createTextMessage("activemq"+i);
System.out.println("發佈消息==>activemq" + i);
messageProducer.send(textMessage);
}
}
}
創建兩個訂閱者
// 第一個訂閱者
package com.zero.activemq2;
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 org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 消費者--訂閱者1
* @author samuel
*
*/
public class Cusouer1 {
private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageConsumer messageConsumer;
connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 創建主題
destination = session.createTopic("firstTopic");
messageConsumer = session.createConsumer(destination);
// 接收消息
messageConsumer.setMessageListener(new Listener1());
}
}
// 第二個訂閱者
package com.zero.activemq2;
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 org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
* 消費者--訂閱者2
* @author samuel
*
*/
public class Cusouer2 {
private static final String USER_NAME = ActiveMQConnection.DEFAULT_USER;
private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
private static final String BROER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory;
Connection connection;
Session session;
Destination destination;
MessageConsumer messageConsumer;
connectionFactory = new ActiveMQConnectionFactory(USER_NAME, PASSWORD, BROER_URL);
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 創建主題
destination = session.createTopic("firstTopic");
messageConsumer = session.createConsumer(destination);
// 接收消息
messageConsumer.setMessageListener(new Listener2());
}
}