1,发布/订阅模式:不会存储主题消息
消息立即发送,如果没有订阅者,该消息会弃用,立即删除.
2,Publish/Subscribe 处理模式(Topic)
消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消息。
和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。 当生产者发布消息,不管是否有消费者。都不会保存 消息 一 定要先有消息的消费者,后有消息的生产者。
(1) 发布者
/**
* 发布/订阅模式:不会存储主题消息
* 消息立即发送,如果没有订阅者,该消息会弃用,立即删除。
* @author reyco
*/
public class Send {
/**
* 发送消息
* @param message 消息内容
*/
public void sendText(String message,Integer size) {
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageProducer producer = null;
TextMessage msg = null;
try {
connectionFactory = new ActiveMQConnectionFactory("username", "password", "tcp://ip:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 创建订阅者/主题目的地
destination = session.createTopic("first");
producer = session.createProducer(null);
for(int i=0;i<size;i++) {
msg = session.createTextMessage("消息内容:"+message+"\t\r"+i);
producer.send(destination, msg);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != producer) {
try {
producer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
if (null != session) {
try {
session.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
if (null != connection) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) throws Exception {
Send send = new Send();
send.sendText("系统信息!",5);
}
}
(2)订阅者:
订阅者一:
/**
* 消费者
*
* @author reyco
*/
public class Receiver1 {
/**
* 接收消息
* @return
* @throws JMSException
*/
public void reveiverMessage() throws JMSException {
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer consumer = null;
try {
connectionFactory = new ActiveMQConnectionFactory("username", "password", "tcp://ip:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
destination = session.createTopic("first");
consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
message.acknowledge();
if (message instanceof TextMessage) {
TextMessage tmsg = (TextMessage) message;
String msg = tmsg.getText().toString();
System.out.println(msg);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != consumer) {
consumer.close();
}
if (null != session) {
session.close();
}
if (null != connection) {
connection.close();
}
}
}
public static void main(String[] args) throws Exception {
Receiver1 receiver = new Receiver1();
receiver.reveiverMessage();
}
}
订阅者者二:
/**
* 消费者
*
* @author reyco
*/
public class Receiver2 {
/**
* 接收消息
* @return
* @throws JMSException
*/
public void reveiverMessage() throws JMSException {
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer consumer = null;
try {
connectionFactory = new ActiveMQConnectionFactory("username", "password", "tcp://ip:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
destination = session.createTopic("first");
consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
message.acknowledge();
if (message instanceof TextMessage) {
TextMessage tmsg = (TextMessage) message;
String msg = tmsg.getText().toString();
System.out.println(msg);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != consumer) {
consumer.close();
}
if (null != session) {
session.close();
}
if (null != connection) {
connection.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
Receiver2 receiver = new Receiver2();
receiver.reveiverMessage();
}
}
订阅者三:
/**
* 消费者
*
* @author reyco
*/
public class Receiver3 {
/**
* 接收消息
* @return
* @throws JMSException
*/
public void reveiverMessage() throws JMSException {
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer consumer = null;
try {
connectionFactory = new ActiveMQConnectionFactory("username", "password", "tcp://ip:61616");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
destination = session.createTopic("first");
consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try {
message.acknowledge();
if (message instanceof TextMessage) {
TextMessage tmsg = (TextMessage) message;
String msg = tmsg.getText().toString();
System.out.println(msg);
}
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != consumer) {
consumer.close();
}
if (null != session) {
session.close();
}
if (null != connection) {
connection.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
Receiver3 receiver = new Receiver3();
receiver.reveiverMessage();
}
}