消息队列实例

来源:互联网 发布:超级玛丽java版 编辑:程序博客网 时间:2024/06/06 04:25

最近在学习JMS(Java Message Service),用到的是activemq(消息队列),写了简单的例子,跟大家一起分享一下:

1.JMS和activemq之间的关系 :  JMS是一种标准规范,接口形式(消息发送是异步,非阻塞的)/activemq则是实现了JMS,存在点对点/发布订阅

2.应用场景 : 系统A---->系统B 发送消息 , 则是就需要消息系统activemq来完成这个任务

3.练习需要用到的jar包 :  activemq-core-5.7.0.jar , geronimo-j2ee-management_1.1_spec-1.0.1.jar , geronimo-jms_1.1_spec-1.1.1.jar , org.slf4j.api_1.6.4.jar

4.练习需要用到的activemq包 ,官网下载windoiws版本/linux版本(看个人喜好,建议用linux版本) , 下面的例子是windows版本,为了方便

5.下载解压之后双击运行bin目录下win64下activemq.bat

6.运行完毕之后打开web控制台进行查看验证 , 网页地址栏输入 : http://localhost:8161/admin    user : admin  pwd : admin

7.创建两个工程A和工程B编写测试类 :

[java] view plain copy
  1. package activemqA;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.MessageProducer;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10. import org.apache.activemq.ActiveMQConnectionFactory;  
  11.   
  12. //生产者  
  13. public class Sender {  
  14.       
  15.     public static void main(String args[]){  
  16.           
  17.         Sender sender = new Sender();  
  18.         sender.sendMessage("hello,activemqB");  
  19.           
  20.     }  
  21.       
  22.     public void sendMessage(String msg){  
  23.           
  24.         ConnectionFactory connectionFactory = null;  
  25.         Connection connection = null;  
  26.         Session session = null;  
  27.           
  28.         try {  
  29.             //1.创建连接工厂  
  30.             connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
  31.             //2.得到一个连接  
  32.             connection = connectionFactory.createConnection();  
  33.             //3.创建一个Session  
  34.             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  35.             //4.创建目的地  
  36.             Destination destination = session.createQueue("myQueue");  
  37.             //5.创建发送者  
  38.             MessageProducer messageProducer = session.createProducer(destination);  
  39.             //6.创建文本消息  
  40.             TextMessage textMessage = session.createTextMessage(msg);  
  41.             //7.发送消息  
  42.             messageProducer.send(textMessage);  
  43.         } catch (JMSException e) {  
  44.             e.printStackTrace();  
  45.         }finally{  
  46.             //8.关闭connection和sessiosn  
  47.                     try {  
  48.                         if(connection !=null){  
  49.                         connection.close();  
  50.                         }  
  51.                         if (session !=null) {  
  52.                             session.close();  
  53.                         }  
  54.                     } catch (JMSException e) {  
  55.                         e.printStackTrace();  
  56.             }  
  57.         }  
  58.     }  
  59. }  

检验消息是否发送成功请查看:web控制台会显示条数



[java] view plain copy
  1. package activemqB;  
  2.   
  3. import javax.jms.Connection;  
  4. import javax.jms.ConnectionFactory;  
  5. import javax.jms.Destination;  
  6. import javax.jms.JMSException;  
  7. import javax.jms.MessageConsumer;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10. import org.apache.activemq.ActiveMQConnectionFactory;  
  11.   
  12. //消费者  
  13. public class Receiver {  
  14.       
  15.     public static void main(String args[]){  
  16.           
  17.         Receiver receiver = new Receiver();  
  18.         receiver.receiverMessage();  
  19.     }  
  20.       
  21.     public void receiverMessage(){  
  22.           
  23.         ConnectionFactory connectionFactory = null;  
  24.         Connection connection = null;  
  25.         Session session =null;  
  26.       
  27.         try {  
  28.             //1.创建连接工厂  
  29.             connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
  30.             //2.得到一个连接  
  31.             connection = connectionFactory.createConnection();  
  32.             //3.创建一个Session  
  33.             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  34.             //4.创建目的地  
  35.             Destination destination = session.createQueue("myQueue");  
  36.             //5.创建接受者  
  37.             MessageConsumer messageConsumer = session.createConsumer(destination);  
  38.             //6.打开连接  
  39.             connection.start();  
  40.             //7.接收消息  
  41.             TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);  
  42.             //8.输出验证  
  43.             System.out.println("接收到的消息为:"+textMessage.getText());  
  44.         } catch (JMSException e) {  
  45.             e.printStackTrace();  
  46.         }finally {  
  47.                 try {  
  48.                     if (connection !=null) {  
  49.                     connection.close();  
  50.                     }  
  51.                     if (session !=null) {  
  52.                         session.close();  
  53.                     }  
  54.                 } catch (JMSException e) {  
  55.                     e.printStackTrace();  
  56.             }  
  57.         }  
  58.     }  
  59. }  

8.温馨提示:需要注意的是在编写生产者时创建文本应把msg参数放进去,否则消费者这边输出是null奋斗