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