对于非持久的topic消息的发送
基本跟前面发送队列信息是一样的,只是把创建Destination的地方,由创建队列替换成创建Topic,例如:Destination destination = session.createTopic("MyTopic");
对于非持久的topic消息的接收
1.必须要接收方在线,然后客户端再发送消息,接收方才能接收到消息
2.同样把创建Destination的地方换成创建Topic,例如:Destination destination = session.createTopic("MyTopic");
3.由于不知道客户端发送多少消息,因此改成while循环的方式了,例如:
Message message = consumer.receive();
while(message!=null){
TextMessage txtMsg = (TextMessage)message;
System.out.println("收到消息:"+txtMsg.getText());
message = consumer.receive(1000L);
}
例子:
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class NoPersistenceSender {
public static void main(String[] args) throws JMSException, InterruptedException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic("MyTopic");
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 3; i++) {
TextMessage message = session.createTextMessage("message--" + i);
producer.send(message);
}
session.commit();
session.close();
connection.close();
}
}
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class NoPersistenceReceiver {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.128:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic("MyTopic");
MessageConsumer consumer = session.createConsumer(destination);
Message message = consumer.receive();//receive()是阻塞方法
while (message != null) {
TextMessage txtMsg = (TextMessage) message;
System.out.println("收到消息:" + txtMsg.getText());
message = consumer.receive(1000L);
}
session.commit();
session.close();
connection.close();
}
}
第一种情况:先运行生产者,后运行消费者。消费者一直阻塞,消费者没有接收到消息。
第二种情况:先运行消费者,后运行生产者。消费者收到消息。