ActiveMQ 最关心的就是消息的发送与接收了,消息发送不是问题,主要是消息接收,或者说是让消息不停地接收.
消息监听器:负责自动监听qctiveMQ中的队列消息,一旦有新消息后,将自动读取消费,不用担心漏掉消息。
接收消息有两种方式,
方式一:
boolean flag = true;
while(flag){
TextMessage message = (TextMessage)consumer.receive(1000 * 100);
if(message != null){
log.info("receive message : "+ message.getText());
if("stop".equals( message.getText())){
flag = false;
}
}
}这样就可以不间断地接收消息,当向客户端发送一个 “stop” 的时候,客户端进程将会结束。
方法二:
使用 MessageListener,MessageListener是最原始的消息监听器,它是JMS规范中定义的一个接口。其中定义了一个用于处理接收到的消息的onMessage方法,该方法只接收一个Message参数
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class ConsumerMessageListener implements MessageListener {
public void onMessage(Message message) {
//这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换,或者直接把onMessage方法的参数改成Message的子类TextMessage
TextMessage textMsg = (TextMessage) message;
System.out.println("接收到一个纯文本消息。");
try {
System.out.println("消息内容是:" + textMsg.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
本文介绍了ActiveMQ消息队列中的两种消息接收方式:循环轮询和使用MessageListener接口。通过这两种方式可以确保消息被持续不断地消费,避免消息丢失。
1063





