Session session = conn.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
第一个参数代表该session是否支持事务,true 表示这个会话是事务性的,需要显式的commit 或者rollback ().
如果没有显示的提交session.commit(),接收端是不能够收到发送方的消息的。
public static void main(String[] args)
throws Exception
{
// 设置用户名和密码,这个用户名和密码在conf目录下的credentials.properties文件中,也可以在activemq.xml中配置
String url = "tcp://localhost:61616";
String userName = "system";
String password = "manager";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName,password,url);
// 2.创建连接接口
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
// 创建目标,就创建主题也可以创建队列
Destination destination = session.createQueue("test_queue");
// 创建消息生产者
MessageProducer producer = session.createProducer(destination);
producer.send(session.createTextMessage("you can get me!"));
session.commit();
producer.send(session.createTextMessage("you can get me too!"));
session.commit();
//没有提交会话,接收端不能接到消息
producer.send(session.createTextMessage("you can't get me !"));
// 关闭资源
session.close();
connection.close();
}
public static void main(String[] args)
throws JMSException
{
String url = "tcp://localhost:61616";
String userName = "system";
String password = "manager";
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(userName,password,url);
Connection connection = connectionFactory.createConnection();
//一定要start
connection.start();
// 通过连接接口创建一个会话接口
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 会话接口创建有关主题的目标接口
Destination destination = session.createQueue("test_queue");
// 会话接口再根据目标接口来创建一个消息消费者接口
MessageConsumer consumer = session.createConsumer(destination);
// 消息消费者接收消息
consumer.setMessageListener(new MessageListener()
{
@Override
public void onMessage(Message msg)
{
TextMessage message = (TextMessage)msg;
try
{
System.out.println("收到消息:"+message.getText());
}
catch (JMSException e)
{
e.printStackTrace();
}
}
});
}