ActiveMQ 点对点消息实现

来源:互联网 发布:js 手机 输入法弹出 编辑:程序博客网 时间:2024/04/27 17:21

第一节: 直接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.jar
3.  在 src 下创建com.xx.Activemq 下创建类: JMSProducer.java
public 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 消息已经被消费了
                                             
0 0
原创粉丝点击