1.向消息中间件写入消息
@Test
public void testTopicSend() throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic_test");
MessageProducer producer = session.createProducer(topic);
for(int i = 0;i < 10;i++) {
MapMessage message = session.createMapMessage();
message.setString("username", "djc");
message.setString("password", "123456");
producer.send(message);
}
session.close();
connection.close();
}
2,手动方式实现消息的消费
@Test
public void testTopicReceiver() throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic_test");
MessageConsumer consumer = session.createConsumer(topic);
MapMessage message = (MapMessage) consumer.receive();
System.out.println(message.getString("username"));
session.close();
connection.close();
}
3.监听器方式实现消息的消费
可同时开启多个监听器测试
@Test //监听器1
public void testTopicReceiverListener1() throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic_test");
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message arg0) {
try {
MapMessage message = (MapMessage) arg0;
System.out.println("Listener1===用户名是:"+message.getString("username"));
} catch (JMSException e) {
e.printStackTrace();
}
}
});
while(true);
}
@Test //监听器2
public void testTopicReceiverListener2() throws JMSException {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic_test");
MessageConsumer consumer = session.createConsumer(topic);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message arg0) {
try {
MapMessage message = (MapMessage) arg0;
System.out.println("Listener2===用户名是:"+message.getString("username"));
} catch (JMSException e) {
e.printStackTrace();
}
}
});
while(true);
}
注意:Topic模式消费者一方要先开启,监听器1,监听器2模仿多客户端访问