消息队列--JMS的ActiveMQ

  1. <dependency>  
  2.     <groupId>org.apache.activemq</groupId>  
  3.     <artifactId>activemq-core</artifactId>  
  4.     <version>5.7.0</version>  
  5. </dependency>  

  1. package jms;  
  2.   
  3.   
  4. import org.apache.activemq.ActiveMQConnectionFactory;  
  5.   
  6. import javax.jms.*;  
  7.   
  8. /** 
  9. 下载安装http://apache.fayea.com/activemq/ 
  10.  启动命令:bin\win64\activemq.bat 
  11.  http://www.cnblogs.com/phoebus0501/archive/2011/02/24/1964228.html 
  12.  */  
  13.   
  14. public class MessageReceiver implements Runnable {  
  15.     private String url;  
  16.     private String user;  
  17.     private String password;  
  18.     private final String QUEUE;  
  19.   
  20.     public MessageReceiver(String queue, String url, String user, String password) {  
  21.         this.url = url;  
  22.         this.user = user;  
  23.         this.password = password;  
  24.         this.QUEUE = queue;  
  25.     }  
  26.   
  27.     @Override  
  28.     public void run() {  
  29.         ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(  
  30.                 user, password, url);  
  31.         Session session = null;  
  32.         Destination receiveQueue;  
  33.         try {  
  34.             Connection connection = connectionFactory.createConnection();  
  35.   
  36.             session = connection  
  37.                     .createSession(true, Session.SESSION_TRANSACTED);  
  38.             receiveQueue = session.createQueue(QUEUE);  
  39.             MessageConsumer consumer = session.createConsumer(receiveQueue);  
  40.   
  41.             connection.start();  
  42.             System.out.println(Thread.currentThread().getName()+" start");  
  43.   
  44.             while (true) {  
  45.                 Message message = consumer.receive();  
  46.   
  47.                 if (message instanceof TextMessage) {  
  48.                     TextMessage receiveMessage = (TextMessage) message;  
  49.                     System.out.println("我是Receiver,收到消息如下: \r\n"  
  50.                             + receiveMessage.getText());  
  51.                 } else {  
  52.                     session.commit();  
  53.                     break;  
  54.                 }  
  55.   
  56.             }  
  57.             connection.close();  
  58.             System.out.println(Thread.currentThread().getName()+" close");  
  59.         } catch (JMSException e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.     }  
  63.   
  64.     public String getUrl() {  
  65.         return url;  
  66.     }  
  67.   
  68.     public void setUrl(String url) {  
  69.         this.url = url;  
  70.     }  
  71.   
  72.     public String getUser() {  
  73.         return user;  
  74.     }  
  75.   
  76.     public void setUser(String user) {  
  77.         this.user = user;  
  78.     }  
  79.   
  80.     public String getPassword() {  
  81.         return password;  
  82.     }  
  83.   
  84.     public void setPassword(String password) {  
  85.         this.password = password;  
  86.     }  
  87.   
  88.   
  89. }  

  1. package jms;  
  2. import org.apache.activemq.ActiveMQConnectionFactory;  
  3. import javax.jms.*;  
  4. import java.util.Date;  
  5. /** 
  6.  * 消息发送器 
  7.  * @author xiaochuanyu 
  8.  * 
  9.  */  
  10. public class MessageSender implements Runnable {  
  11.   
  12.     private String url;  
  13.     private String user;  
  14.     private String password;  
  15.     private final String QUEUE;  
  16.   
  17.     public MessageSender(String queue, String url, String user, String password) {  
  18.         this.url = url;  
  19.         this.user = user;  
  20.         this.password = password;  
  21.         this.QUEUE = queue;  
  22.     }  
  23.   
  24.     @Override  
  25.     public void run() {  
  26.         ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(  
  27.                 user, password, url);  
  28.         Session session = null;  
  29.         Destination sendQueue;  
  30.         Connection connection = null;  
  31.   
  32.         int messageCount = 0;  
  33.         try {  
  34.             connection = connectionFactory.createConnection();  
  35.   
  36.             connection.start();  
  37.             System.out.println(Thread.currentThread().getName()+" start");  
  38.   
  39.             while (true) {  
  40.                 session = connection.createSession(true,  
  41.                         Session.SESSION_TRANSACTED);  
  42.   
  43.                 sendQueue = session.createQueue(QUEUE);  
  44.                 MessageProducer sender = session.createProducer(sendQueue);  
  45.                 TextMessage outMessage = session.createTextMessage();  
  46.                 outMessage.setText(new Date() + "现在发送是第" + messageCount + "条消息");  
  47.   
  48.                 sender.send(outMessage);  
  49.   
  50.                 session.commit();  
  51.   
  52.                 sender.close();  
  53.   
  54.                 if ((++messageCount) == 10) {  
  55.                     // 发够十条消息退出  
  56.                     break;  
  57.                 }  
  58.                 Thread.sleep(1000);  
  59.             }  
  60.   
  61.             connection.close();  
  62.             System.out.println(Thread.currentThread().getName()+" close");  
  63.         } catch (JMSException e) {  
  64.             e.printStackTrace();  
  65.         } catch (InterruptedException e) {  
  66.             // TODO Auto-generated catch block  
  67.             e.printStackTrace();  
  68.         }  
  69.     }  
  70.   
  71.     public String getUrl() {  
  72.         return url;  
  73.     }  
  74.   
  75.     public void setUrl(String url) {  
  76.         this.url = url;  
  77.     }  
  78.   
  79.     public String getUser() {  
  80.         return user;  
  81.     }  
  82.   
  83.     public void setUser(String user) {  
  84.         this.user = user;  
  85.     }  
  86.   
  87.     public String getPassword() {  
  88.         return password;  
  89.     }  
  90.   
  91.     public void setPassword(String password) {  
  92.         this.password = password;  
  93.     }  
  94.   
  95. }  

  1. package jms;  
  2.   
  3. /** 
  4.   java通过ActiveMQ实现JMS的消息队列实例 
  5.  下载安装http://apache.fayea.com/activemq/ 
  6.  启动命令:bin\win64\activemq.bat 
  7.  http://www.cnblogs.com/phoebus0501/archive/2011/02/24/1964228.html 
  8.  */  
  9. public class MyActiveMQDemo {  
  10.     //http://blog.sina.com.cn/s/blog_a459dcf501017oml.html需要安装ActiveMQ 然后启动bin\win64\activemq.bat  
  11.   
  12.     public static void main(String[] args) {  
  13.         String url = "tcp://localhost:61616";  
  14.         String user = "xxx";  
  15.         String password = "xxx";  
  16.         String query = "MyQueue";  
  17.         new Thread(new MessageReceiver(query,url,user,password), "Name-Receiver").start();  
  18.         new Thread(new MessageSender(query,url,user,password), "Name-Sender").start();  
  19.     }  
  20. }  

官网例子:

  1. import org.apache.activemq.ActiveMQConnectionFactory;  
  2.    
  3. import javax.jms.Connection;  
  4. import javax.jms.DeliveryMode;  
  5. import javax.jms.Destination;  
  6. import javax.jms.ExceptionListener;  
  7. import javax.jms.JMSException;  
  8. import javax.jms.Message;  
  9. import javax.jms.MessageConsumer;  
  10. import javax.jms.MessageProducer;  
  11. import javax.jms.Session;  
  12. import javax.jms.TextMessage;  
  13.    
  14. /** 
  15.  * Hello world! 
  16.  */  
  17. public class App {  
  18.    
  19.     public static void main(String[] args) throws Exception {  
  20.         thread(new HelloWorldProducer(), false);  
  21.         thread(new HelloWorldProducer(), false);  
  22.         thread(new HelloWorldConsumer(), false);  
  23.         Thread.sleep(1000);  
  24.         thread(new HelloWorldConsumer(), false);  
  25.         thread(new HelloWorldProducer(), false);  
  26.         thread(new HelloWorldConsumer(), false);  
  27.         thread(new HelloWorldProducer(), false);  
  28.         Thread.sleep(1000);  
  29.         thread(new HelloWorldConsumer(), false);  
  30.         thread(new HelloWorldProducer(), false);  
  31.         thread(new HelloWorldConsumer(), false);  
  32.         thread(new HelloWorldConsumer(), false);  
  33.         thread(new HelloWorldProducer(), false);  
  34.         thread(new HelloWorldProducer(), false);  
  35.         Thread.sleep(1000);  
  36.         thread(new HelloWorldProducer(), false);  
  37.         thread(new HelloWorldConsumer(), false);  
  38.         thread(new HelloWorldConsumer(), false);  
  39.         thread(new HelloWorldProducer(), false);  
  40.         thread(new HelloWorldConsumer(), false);  
  41.         thread(new HelloWorldProducer(), false);  
  42.         thread(new HelloWorldConsumer(), false);  
  43.         thread(new HelloWorldProducer(), false);  
  44.         thread(new HelloWorldConsumer(), false);  
  45.         thread(new HelloWorldConsumer(), false);  
  46.         thread(new HelloWorldProducer(), false);  
  47.     }  
  48.    
  49.     public static void thread(Runnable runnable, boolean daemon) {  
  50.         Thread brokerThread = new Thread(runnable);  
  51.         brokerThread.setDaemon(daemon);  
  52.         brokerThread.start();  
  53.     }  
  54.    
  55.     public static class HelloWorldProducer implements Runnable {  
  56.         public void run() {  
  57.             try {  
  58.                 // Create a ConnectionFactory  
  59.                 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");  
  60.    
  61.                 // Create a Connection  
  62.                 Connection connection = connectionFactory.createConnection();  
  63.                 connection.start();  
  64.    
  65.                 // Create a Session  
  66.                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  67.    
  68.                 // Create the destination (Topic or Queue)  
  69.                 Destination destination = session.createQueue("TEST.FOO");  
  70.    
  71.                 // Create a MessageProducer from the Session to the Topic or Queue  
  72.                 MessageProducer producer = session.createProducer(destination);  
  73.                 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);  
  74.    
  75.                 // Create a messages  
  76.                 String text = "Hello world! From: " + Thread.currentThread().getName() + " : " + this.hashCode();  
  77.                 TextMessage message = session.createTextMessage(text);  
  78.    
  79.                 // Tell the producer to send the message  
  80.                 System.out.println("Sent message: "+ message.hashCode() + " : " + Thread.currentThread().getName());  
  81.                 producer.send(message);  
  82.    
  83.                 // Clean up  
  84.                 session.close();  
  85.                 connection.close();  
  86.             }  
  87.             catch (Exception e) {  
  88.                 System.out.println("Caught: " + e);  
  89.                 e.printStackTrace();  
  90.             }  
  91.         }  
  92.     }  
  93.    
  94.     public static class HelloWorldConsumer implements Runnable, ExceptionListener {  
  95.         public void run() {  
  96.             try {  
  97.    
  98.                 // Create a ConnectionFactory  
  99.                 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost");  
  100.    
  101.                 // Create a Connection  
  102.                 Connection connection = connectionFactory.createConnection();  
  103.                 connection.start();  
  104.    
  105.                 connection.setExceptionListener(this);  
  106.    
  107.                 // Create a Session  
  108.                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  109.    
  110.                 // Create the destination (Topic or Queue)  
  111.                 Destination destination = session.createQueue("TEST.FOO");  
  112.    
  113.                 // Create a MessageConsumer from the Session to the Topic or Queue  
  114.                 MessageConsumer consumer = session.createConsumer(destination);  
  115.    
  116.                 // Wait for a message  
  117.                 Message message = consumer.receive(1000);  
  118.    
  119.                 if (message instanceof TextMessage) {  
  120.                     TextMessage textMessage = (TextMessage) message;  
  121.                     String text = textMessage.getText();  
  122.                     System.out.println("Received: " + text);  
  123.                 } else {  
  124.                     System.out.println("Received: " + message);  
  125.                 }  
  126.    
  127.                 consumer.close();  
  128.                 session.close();  
  129.                 connection.close();  
  130.             } catch (Exception e) {  
  131.                 System.out.println("Caught: " + e);  
  132.                 e.printStackTrace();  
  133.             }  
  134.         }  
  135.    
  136.         public synchronized void onException(JMSException ex) {  
  137.             System.out.println("JMS Exception occured.  Shutting down client.");  
  138.         }  
  139.     }  
  140. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值