ActiveMq点对点模式发送、接收消息

来源:互联网 发布:cip数据核字号查询打印 编辑:程序博客网 时间:2024/05/20 18:02

消息发送流程:

1)  客户机发送消息到JMS消息中间件

2)  服务端负责监听JMS消息目的地。

3)  发现JMS里面有消息产生,服务就可以接受消息。

点对点消息发送服务:

1)  消息只能被一个服务接受

2)  多个服务同时监听消息服务器,遵循先来后到原则。

3)  消息一旦被接受,消息自动消失。

4)  如果消息一直没有被接受,消息会等待被接受,直到被接受为止。


// 点对点   发送消息

public class MySendMessageMQ {


@Test
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();
}

//接受消息:异步模式:使用监听模式接受消息

@Test
public 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();
}


}


0 0
原创粉丝点击