消息中间件的 topic
模式就类似于群聊系统,你发出去的每条消息,只要在这个群里的人都可以接收到消息。那现在就可以通过这种特性实现一个简单的群聊系统。
首先这是发送消息的程序:
package activeMQ.groupchat;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.util.Scanner;
/**
* @author :
* @date : 2020-04-09 13:06
* @description :
*/
public class PostMessage {
//你的activeMQ地址,类似于 `tcp://47.95.192.43:61616`
private static final String BROKE_URL = "tcp://47.95.192.43:61616";
private static final String TOPIC_NAME = "CHAT";
public static void main(String[] args) throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BROKE_URL);
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(TOPIC_NAME);
MessageProducer producer = session.createProducer(topic);
Scanner scanner = new Scanner(System.in);
System.out.print("please input your name:");
String nickname = scanner.nextLine();
System.out.println("Hi, " + nickname + "!");
String message = null;
while (true) {
System.out.print("Please input your mesage: ");
message = scanner.nextLine();
if (message.equals("exit"))
break;
TextMessage textMessage = session.createTextMessage(message);
producer.send(textMessage);
System.out.println(">>>" + message);
}
producer.close();
session.close();
connection.close();
}
}
接下来是接收消息的控制板,启动该程序之后,小伙伴发送的消息你也可以接受得到:
package activeMQ.groupchat;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
import java.io.IOException;
/**
* @author :
* @date : 2020-04-09 13:06
* @description :
*/
public class BulletinBoard {
private static final String BROKE_URL = "tcp://47.95.192.43:61616";
private static final String TOPIC_NAME = "CHAT";
public static void main(String[] args) throws JMSException, IOException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(BROKE_URL);
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(TOPIC_NAME);
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (null != message && message instanceof TextMessage){
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(">>>" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
System.out.println("Press any key to close the bulletin board.");
System.in.read(); // Pause
consumer.close();
session.close();
connection.close();
}
}
效果:
首先发送消息:
在另在一个程序的执行面板中,就可以介绍到消息: