第一节: 直接Receive 方式
Session.AUTO_ACKNOWLEDGE。当客户成功的从receive 方法返回的时候,或者从MessageListener.onMessage方法成功返回的时候,会话自动确认客户收到的消息。Session.CLIENT_ACKNOWLEDGE。客户通过消息的acknowledge 方法确认消息。需要注意的是,在这种模式中,确认是在会话层上进行:确认一个被消费的消息将自动确认所有已被会话消费的消息。例如,如果一个消息消费者消费了10 个消息,然后确认第5 个消息,那么所有10 个消息都被确认。Session.DUPS_ACKNOWLEDGE。该选择只是会迟钝第确认消息的提交。如果JMS provider 失败,那么可能会导致一些重复的消息。如果是重复的消息,那么JMS provider 必须把消息头的JMSRedelivered 字段设置为true。
方法步骤: 第一讲 发送消息
1. 创建JavaSE Project 项目,取名 Java1234_JMS_ActiveMQ01 项目.2. 添加jar包:activemq-all-5.11.1.jar3. 在 src 下创建com.xx.Activemq 下创建类: JMSProducer.javapublic class JMSProducer { // 默认的连接用户名 private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // 默认的连接密码 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接地址 private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL; // 发送的消息数量 private static final int SENDNUM = 10; public static void main(String[] args) { // 连接工厂 // 实例化连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMSProducer.USERNAME, JMSProducer.PASSWORD,JMSProducer.BROKEURL); // 连接 Connection connection = null; // 会话 接受或者发送消息的线程 Session session=null; // 消息的目的地 Destination destination=null; // 消息生产者 MessageProducer messageProducer=null; try { // 通过连接工厂获取连接 connection = connectionFactory.createConnection(); // 启动连接 connection.start(); // 创建Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); // 创建消息队列 destination = session.createQueue("FirstQueue1"); // 创建消息生产者 messageProducer = session.createProducer(destination); // 发送消息 sendMessage(session, messageProducer); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (JMSException e) { e.printStackTrace(); } } } } //发送消息 public static void sendMessage(Session session, MessageProducer messageProducer) throws Exception { for (int i = 0; i < JMSProducer.SENDNUM; i++) { TextMessage message = session.createTextMessage("ActiveMQ 发送的消息" + i); System.out.println("发送消息:" + "ActiveMQ 发送的消息" + i); messageProducer.send(message); } } }
4. 运行 JMSProducer.java 中main方法
5. 访问:http://127.0.0.1:8161/admin/queues.jsp
第二讲 接收信息(1)
1. 在 src 下创建com.xxx.Activemq 下创建类: JMSConsumer.java
public static void main(String[] args) { // 实例化连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(JMSConsumer.USERNAME, JMSConsumer.PASSWORD,JMSConsumer.BROKEURL); Connection connection = null;// 连接 Session session=null;// 会话 接受或者发送消息的线程 Destination destination=null;// 消息的目的地 MessageConsumer messageConsumer=null;// 消息消费者 try { // 通过连接工厂获取连接 connection = connectionFactory.createConnection(); connection.start(); // 启动连接 session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session // 创建连接消息队列 destination = session.createQueue("FirstQueue1"); // 创建消息生产者 messageConsumer = session.createConsumer(destination); while(true){ TextMessage textMessage=(TextMessage) messageConsumer.receive(); if (textMessage!=null) { System.out.println("收到的消息:"+textMessage.getText()); }else { break; } } } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (JMSException e) { e.printStackTrace(); } } } } }
2. 运行 JMSConsumer.java 中main方法
3. 访问:http://127.0.0.1:8161/admin/queues.jsp 消息已经被消费了
第三讲 接收信息(2)
1. 在 src 下创建com.xxx.Activemq 下创建类: Listener.java
//消息监听 public class Listener implements MessageListener{ @Override public void onMessage(Message message) { try { System.out.println("2收到的消息:"+((TextMessage)message).getText()); } catch (JMSException e) { e.printStackTrace(); } } }
2. 在 src 下创建com.xxx.Activemq 下创建类: JMSConsumer2.java
public class JMSConsumer2 { private static final String USERNAME = ActiveMQConnection.DEFAULT_USER; // 默认的连接用户名 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD; // 默认的连接密码 private static final String BROKEURL = ActiveMQConnection.DEFAULT_BROKER_URL; // 默认的连接地址 public static void main(String[] args) { ConnectionFactory connectionFactory; // 连接工厂 Connection connection = null; // 连接 Session session; // 会话 接受或者发送消息的线程 Destination destination; // 消息的目的地 MessageConsumer messageConsumer; // 消息的消费者 // 实例化连接工厂 connectionFactory = new ActiveMQConnectionFactory(JMSConsumer2.USERNAME, JMSConsumer2.PASSWORD, JMSConsumer2.BROKEURL); try { connection = connectionFactory.createConnection(); // 通过连接工厂获取连接 connection.start(); // 启动连接 session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); // 创建Session destination = session.createQueue("FirstQueue1"); // 创建连接的消息队列 messageConsumer = session.createConsumer(destination); // 创建消息消费者 messageConsumer.setMessageListener(new Listener()); // 注册消息监听 } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
3. 运行 JMSConsumer2.java 中main方法
4. 访问:http://127.0.0.1:8161/admin/queues.jsp 消息已经被消费了