activemq 消息模式流程: ConnnectionFactory --> Connection --> Session --> Message
---ConnectionFactory,通过连接工厂创建连接ConnectionFactory factory = new ActiveMQConnectionFactory("xxx.properties");
Connection connection = factory.createConnecion();connection.start();---session,创建会话
final Session session = connection.createSession(false, AUTO_ACKNOWLEDGE);---设置JMSReplyTo为一个Destination,表示需要回复的目的地
message.setJMSReplyTo(replyQueue);
---message,创建消息
Message message = session.createTextMessage("jms-active");---queue,创建队列
Queue queue = new ActiveMQQueue("active_queue");---topic,创建topic
Topic topic = new ActiveMQTopic("active_topic");
queue与topic不同之处,就在于此。二者的创建方式的不同
---producer,创建生产者
MessageProducer producer = session.createProducer(queue);---设置是否可持久化
producer.setDeliveryMode(DeliveryMode.persistent或nonpersistent);
--- 设置消息的有效期
producer.setTimeToLive(3600000); 默认是0表示永不过期
---send message,发送消息至queue
producer.send(message); ---consumer,创建消费者MessageConsumer consumer = session.createConsumer(queue);---创建只接受特定消息的一个消费者,selector是一个字符串,用来过来消息
sesssion.createConsumer(destination, selector);
---receive msg,接受消息
第一种receive方法没有设置等待时间,所以消费者会一直等待。可通过int timeout设置等待的超时时间
Message receiveMsg = consumer.receive();(TextMessge)receiveMsg.getText();
可知这种方式不够友好,可改用监听的方式来消费消息
consumer.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message m) {
TextMessage textMsg = (TextMessage) m;
try{
System.out.println(textMsg.getText());
}catch(JMSException e) {
xxx
}
}
});
消费者与生产者通过同一queue来绑定一对一关系