自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ActiveMQ:JMS開源框架入門介紹

開發(fā) 后端
JMS是為企業(yè)級(jí)的應(yīng)用提供一種智能的消息系統(tǒng),JMS定義了一整套的企業(yè)級(jí)的消息概念與工具,盡可能最小化的Java語言概念去構(gòu)建最大化企業(yè)消息應(yīng)用。統(tǒng)一已經(jīng)存在的企業(yè)級(jí)消息系統(tǒng)功能。下面我們來學(xué)習(xí)JMS開源框架入門介紹。

介紹基本的JMS概念與開源的JMS框架ActiveMQ應(yīng)用,內(nèi)容涵蓋一下幾點(diǎn):

  1. 基本的JMS概念
  2. JMS的消息模式
  3. 介紹ActiveMQ
  4. 一個(gè)基于ActiveMQ的JMS例子程序

一:JMS基本概念

1. JMS的目標(biāo)

為企業(yè)級(jí)的應(yīng)用提供一種智能的消息系統(tǒng),JMS定義了一整套的企業(yè)級(jí)的消息概念與工具,盡可能最小化的Java語言概念去構(gòu)建最大化企業(yè)消息應(yīng)用。統(tǒng)一已經(jīng)存在的企業(yè)級(jí)消息系統(tǒng)功能。

2. 提供者

JMS提供者是指那些完全完成JMS功能與管理功能的JMS消息廠商,理論上JMS提供者完成。

JMS消息產(chǎn)品必須是100%的純Java語言實(shí)現(xiàn),可以運(yùn)行在跨平臺(tái)的架構(gòu)與操作系統(tǒng)上,當(dāng)前一些JMS廠商包括IBM,Oracle, JBoss社區(qū) (JBoss Community), Apache 社區(qū)(ApacheCommunity)。

3. JMS應(yīng)用程序, 一個(gè)完整的JMS應(yīng)用應(yīng)該實(shí)現(xiàn)以下功能:

  • JMS 客戶端 – Java語言開發(fā)的接受與發(fā)送消息的程序
  • 非JMS客戶端 – 基于消息系統(tǒng)的本地API實(shí)現(xiàn)而不是JMS
  • 消息 – 應(yīng)用程序用來相互交流信息的載體
  • 被管理對(duì)象–預(yù)先配置的JMS對(duì)象,JMS管理員創(chuàng)建,被客戶端運(yùn)用。如鏈接工廠,主題等
  • JMS提供者–完成JMS功能與管理功能的消息系統(tǒng)

二:JMS的消息模式

1.點(diǎn)對(duì)點(diǎn)的消息模式(Point to Point Messaging)


 

下面的JMS對(duì)象在點(diǎn)對(duì)點(diǎn)消息模式中是必須的:

a.隊(duì)列(Queue) – 一個(gè)提供者命名的隊(duì)列對(duì)象,客戶端將會(huì)使用這個(gè)命名的隊(duì)列對(duì)象

b.隊(duì)列鏈接工廠(QueueConnectionFactory) – 客戶端使用隊(duì)列鏈接工廠創(chuàng)建鏈接隊(duì)列

ConnectionQueue來取得與JMS點(diǎn)對(duì)點(diǎn)消息提供者的鏈接。

c. 鏈接隊(duì)列(ConnectionQueue) – 一個(gè)活動(dòng)的鏈接隊(duì)列存在在客戶端與點(diǎn)對(duì)點(diǎn)消息提供者之間,客戶用它創(chuàng)建一個(gè)或者多個(gè)JMS隊(duì)列會(huì)話(QueueSession)

d.     隊(duì)列會(huì)話(QueueSession) – 用來創(chuàng)建隊(duì)列消息的發(fā)送者與接受者(QueueSenderand QueueReceiver)

e.消息發(fā)送者(QueueSender 或者M(jìn)essageProducer)– 發(fā)送消息到已經(jīng)聲明的隊(duì)列

f.消息接受者(QueueReceiver或者M(jìn)essageConsumer) – 接受已經(jīng)被發(fā)送到指定隊(duì)列的消息

2.發(fā)布訂閱模式(publish – subscribe Mode)


 

a.主題Topic(Destination) – 一個(gè)提供者命名的主題對(duì)象,客戶端將會(huì)使用這個(gè)命名的主題對(duì)象

b.主題鏈接工廠(TopciConnectionFactory) – 客戶端使用主題鏈接工廠創(chuàng)建鏈接主題

ConnectionTopic來取得與JMS消息Pub/Sub提供者的鏈接。

c.鏈接主題(ConnectionTopic) – 一個(gè)活動(dòng)的鏈接主題存在發(fā)布者與訂閱者之間

d.會(huì)話(TopicSession) – 用來創(chuàng)建主題消息的發(fā)布者與訂閱者 (TopicPublisher  and TopicSubscribers)

e.消息發(fā)送者M(jìn)essageProducer) – 發(fā)送消息到已經(jīng)聲明的主題

f.消息接受者(MessageConsumer) – 接受已經(jīng)被發(fā)送到指定主題的消息

三:介紹ActiveMQ

ActiveMQ是apache社區(qū)完成的JMS開源消息組件,客戶端支持多種語言調(diào)用,包括Java,C++, C#,

Perl, Python等。支持Spring配置集成等。更多信息訪問這里:

http://activemq.apache.org/index.html

四:基于ActiveMQ的Publish/subscribe模式Demo程序

 

消息Broker,JMSprovider

  1. import java.net.URI;  
  2. import java.net.URISyntaxException;  
  3.  
  4. import javax.jms.Connection;  
  5. import javax.jms.ConnectionFactory;  
  6. import javax.jms.Destination;  
  7. import javax.jms.JMSException;  
  8. import javax.jms.MessageProducer;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11. import javax.naming.Context;  
  12. import javax.naming.InitialContext;  
  13. import javax.naming.NamingException;  
  14.  
  15. import org.apache.activemq.broker.BrokerFactory;  
  16. import org.apache.activemq.broker.BrokerService;  
  17. import org.apache.commons.logging.Log;  
  18. import org.apache.commons.logging.LogFactory;  
  19.  
  20. /**  
  21.  * refer to http://activemq.apache.org/jndi-support.html  
  22.  * http://activemq.apache.org/how-do-i-embed-a-broker-inside-a-connection.html  
  23.  * @author gloomyfish  
  24.  *  
  25.  */ 
  26. public class PureJMSProducer {  
  27.       
  28.     private static final Log LOG = LogFactory.getLog(PureJMSProducer.class);  
  29.  
  30.     private PureJMSProducer() {  
  31.     }  
  32.  
  33.     /**  
  34.      * @param args the destination name to send to and optionally, the number of  
  35.      *                messages to send  
  36.      */ 
  37.     public static void main(String[] args) {  
  38.         Context jndiContext = null;  
  39.         ConnectionFactory connectionFactory = null;  
  40.         Connection connection = null;  
  41.         Session session = null;  
  42.         Destination destination = null;  
  43.         MessageProducer producer = null;  
  44.         BrokerService broker = null;  
  45.         final int numMsgs = 10;  
  46.  
  47.         /*  
  48.          * Create a JNDI API InitialContext object  
  49.          */ 
  50.         try {  
  51.             jndiContext = new InitialContext();  
  52.         } catch (NamingException e) {  
  53.             LOG.info("Could not create JNDI API context: " + e.toString());  
  54.             System.exit(1);  
  55.         }  
  56.           
  57.         // create external TCP broker  
  58.         try {  
  59.             broker = BrokerFactory.createBroker(new URI("broker:tcp://localhost:61616"));  
  60.             broker.start();   
  61.         } catch (URISyntaxException e) {  
  62.             LOG.info("Could not create broker: " + e.toString());  
  63.         } catch (Exception e) {  
  64.             LOG.info("Could not create broker: " + e.toString());  
  65.         }  
  66. //        try {  
  67. //            
  68. //        }  
  69.  
  70.         /*  
  71.          * Look up connection factory and destination.  
  72.          */ 
  73.         try {  
  74.             connectionFactory = (ConnectionFactory)jndiContext.lookup("ConnectionFactory");  
  75.             destination = (Destination)jndiContext.lookup("MyTopic");  
  76.         } catch (NamingException e) {  
  77.             LOG.info("JNDI API lookup failed: " + e);  
  78.             System.exit(1);  
  79.         }  
  80.           
  81.         /*  
  82.          * Create connection. Create session from connection; false means  
  83.          * session is not transacted. Create sender and text message. Send  
  84.          * messages, varying text slightly. Send end-of-messages message.  
  85.          * Finally, close connection.  
  86.          */ 
  87.         try {  
  88.             connection = connectionFactory.createConnection();  
  89.             session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  90.             producer = session.createProducer(destination);  
  91.             TextMessage message = session.createTextMessage();  
  92.             Thread.sleep(3000);  
  93.             for (int i = 0; i < numMsgs; i++) {  
  94.                 message.setText("This is message " + (i + 1));  
  95.                 LOG.info("Sending message: " + message.getText());  
  96.                 producer.send(message);  
  97.                 Thread.sleep(3000);  
  98.             }  
  99.  
  100.             /*  
  101.              * Send a non-text control message indicating end of messages.  
  102.              */ 
  103.             producer.send(session.createMessage());  
  104.         } catch (JMSException e) {  
  105.             LOG.info("Exception occurred: " + e);  
  106.         } catch (InterruptedException e) {  
  107.             LOG.info("Exception occurred: " + e);  
  108.         } finally {  
  109.             if (connection != null) {  
  110.                 try {  
  111.                     connection.close();  
  112.                 } catch (JMSException e) {  
  113.                 }  
  114.             }  
  115.         }  
  116.           
  117.         // stop the TCP broker  
  118.         try {  
  119.             broker.stop();  
  120.         } catch (Exception e) {  
  121.             LOG.info("stop the broker failed: " + e);  
  122.         }  
  123.     }  

客戶端:

  1. import java.io.IOException;  
  2.  
  3. import javax.jms.Connection;  
  4. import javax.jms.JMSException;  
  5. import javax.jms.Message;  
  6. import javax.jms.MessageConsumer;  
  7. import javax.jms.MessageListener;  
  8. import javax.jms.Session;  
  9. import javax.jms.TextMessage;  
  10. import javax.jms.Topic;  
  11. import javax.naming.InitialContext;  
  12.  
  13. import org.apache.activemq.ActiveMQConnectionFactory;  
  14.  
  15.  
  16. public class ActiveMQClient {  
  17.       
  18.     public static void main(String[] args) throws IOException {  
  19.           
  20.         // -- http://dlc.sun.com/pdf//816-5904-10/816-5904-10.pdf  
  21.         try {  
  22.         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
  23.         // ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://locahost");  
  24.         Connection connection = factory.createConnection();  
  25.         connection.start();  
  26.           
  27.         // create message topic  
  28.         //Topic topic= new ActiveMQTopic("MyTopic");  
  29.         InitialContext jndiContext=new InitialContext();  
  30.         Topic topic=(Topic)jndiContext.lookup("MyTopic");   
  31.         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  32.           
  33.         // register message consumer  
  34.         MessageConsumer comsumer1 = session.createConsumer(topic);  
  35.         comsumer1.setMessageListener(new MessageListener(){  
  36.             public void onMessage(Message m) {  
  37.                 try {  
  38.                     System.out.println("Consumer get " + ((TextMessage)m).getText());  
  39.                 } catch (JMSException e) {  
  40.                     e.printStackTrace();  
  41.                 }   
  42.             }  
  43.         });  
  44.         Thread.sleep(30000);  
  45.         session.close();  
  46.         connection.stop();  
  47.           
  48.         } catch(Exception e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.     }  

項(xiàng)目配置,Jar依賴:

 

依賴的三個(gè)Jar分別為:

  • activemq-all.jar
  • geronimo-jms_1.1_spec-1.1.1.jar
  • xbean-spring.jar

原文鏈接:http://blog.csdn.net/jia20003/article/details/7601176

責(zé)任編輯:林師授 來源: jia20003的博客
相關(guān)推薦

2015-07-23 10:54:09

Java Mybati框架

2009-06-18 09:29:44

Spring Web

2017-09-16 17:45:32

數(shù)據(jù)采集Scrapy爬蟲

2016-03-18 11:19:57

ios9replaykit入門

2009-01-03 14:39:00

ibmdwSpirit

2020-11-05 10:40:18

ActiveMQ

2009-07-03 16:05:06

JSP開發(fā)框架

2013-02-22 14:45:01

.NETC#Xcode

2011-07-01 15:28:26

PhoneGap代碼示例

2013-03-25 10:26:19

XML數(shù)據(jù)庫

2009-08-25 16:01:43

DataList控件入

2009-06-22 14:13:08

JSF入門

2009-07-02 10:27:20

JSP技術(shù)JSP入門

2017-07-18 15:13:17

2009-06-19 14:49:43

Spring框架

2019-04-29 11:18:43

開源Sensu監(jiān)控

2010-08-05 14:03:32

Flex框架

2011-04-21 10:59:44

SimpleFrameWeb

2011-11-08 10:36:42

Java

2009-07-30 13:21:17

Scala入門Hello World
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)