消息发送流程:
1) 客户机发送消息到JMS消息中间件
2) 服务端负责监听JMS消息目的地。
3) 发现JMS里面有消息产生,服务就可以接受消息。
点对点消息发送服务:
1) 消息只能被一个服务接受
2) 多个服务同时监听消息服务器,遵循先来后到原则。
3) 消息一旦被接受,消息自动消失。
4) 如果消息一直没有被接受,消息会等待被接受,直到被接受为止。
// 点对点 发送消息
public class MySendMessageMQ {
public void sendMessageOne() throws Exception {
// 创建消息工厂:参数:协议,地址,端口
ConnectionFactory cf = newActiveMQConnectionFactory(
"tcp://192.168.66.66:61616");
//获取连接
Connectionconnection = cf.createConnection();
//开启连接
connection.start();
//从连接中获取Session
//第一个参数:消息事务
//第二个参数:事务使用自动应答模式
Session session =connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
//获取消息发送目的地:
//创建消息发送目的地,相当于在JMS服务器中开辟一块空间,空间名称oneQueue
//发送消息就发送到oneQueue消息目的地
Queue queue = session.createQueue("oneQueue"); //createQueue 同步模式
//创建消息发送者
MessageProducer producer = session.createProducer(queue);
//创建模拟消息
TextMessage message = new ActiveMQTextMessage();
message.setText("这是一条消息");
//发送
producer.send(message);
//关闭资源
producer.close();
session.close();
connection.close();
}
}
//接受消息:同步模式
public class MyReceiveMessage {
@Test
public void receiveMessageOne() throws Exception{
// 创建消息工厂:参数:协议,地址,端口
ConnectionFactory cf = new ActiveMQConnectionFactory(
"tcp://192.168.66.66:61616");
//获取连接
Connection connection = cf.createConnection();
//开启连接
connection.start();
//从连接中获取Session
//第一个参数:消息事务
//第二个参数:事务使用自动应答模式
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//获取消息发送目的地:
//创建消息发送目的地,相当于在JMS服务器中开辟一块空间,空间名称oneQueue
//发送消息就发送到oneQueue消息目的地
Queue queue = session.createQueue("oneQueue");
//创建消息接受者
MessageConsumer consumer = session.createConsumer(queue);
//同步接受
Message message = consumer.receive();
if(message instanceof TextMessage){
TextMessage tm = (TextMessage) message;
//转换为TextMessage形式,调用getText()
System.out.println(tm.getText());
}
//关闭资源
consumer.close();
session.close();
connection.close();
}
//接受消息:异步模式:使用监听模式接受消息
@Testpublic void receiveMessageTwo() throws Exception{
// 创建消息工厂:参数:协议,地址,端口
ConnectionFactory cf = new ActiveMQConnectionFactory(
"tcp://192.168.66.66:61616");
//获取连接
Connection connection = cf.createConnection();
//开启连接
connection.start();
//从连接中获取Session
//第一个参数:消息事务
//第二个参数:事务使用自动应答模式
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//获取消息发送目的地:
//创建消息发送目的地,相当于在JMS服务器中开辟一块空间,空间名称oneQueue
//发送消息就发送到oneQueue消息目的地
Queue queue = session.createQueue("oneQueue");
//创建消息接受者
MessageConsumer consumer = session.createConsumer(queue);
//创建监听器 使用监听的方式接受消息
consumer.setMessageListener(new MessageListener() {
//在监听器内负责接收消息
@Override
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage tm = (TextMessage) message;
try {
System.out.println(tm.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
System.in.read(); //使监听器一直处于启动状态,等待消息的注入(一直等待外部的输入状态)
//关闭资源
consumer.close();
session.close();
connection.close();
}
}