成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ActiveMQ:JMS開源框架入門介紹

開發 后端
JMS是為企業級的應用提供一種智能的消息系統,JMS定義了一整套的企業級的消息概念與工具,盡可能最小化的Java語言概念去構建最大化企業消息應用。統一已經存在的企業級消息系統功能。下面我們來學習JMS開源框架入門介紹。

介紹基本的JMS概念與開源的JMS框架ActiveMQ應用,內容涵蓋一下幾點:

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

一:JMS基本概念

1. JMS的目標

為企業級的應用提供一種智能的消息系統,JMS定義了一整套的企業級的消息概念與工具,盡可能最小化的Java語言概念去構建最大化企業消息應用。統一已經存在的企業級消息系統功能。

2. 提供者

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

JMS消息產品必須是100%的純Java語言實現,可以運行在跨平臺的架構與操作系統上,當前一些JMS廠商包括IBM,Oracle, JBoss社區 (JBoss Community), Apache 社區(ApacheCommunity)。

3. JMS應用程序, 一個完整的JMS應用應該實現以下功能:

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

二:JMS的消息模式

1.點對點的消息模式(Point to Point Messaging)


 

下面的JMS對象在點對點消息模式中是必須的:

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

b.隊列鏈接工廠(QueueConnectionFactory) – 客戶端使用隊列鏈接工廠創建鏈接隊列

ConnectionQueue來取得與JMS點對點消息提供者的鏈接。

c. 鏈接隊列(ConnectionQueue) – 一個活動的鏈接隊列存在在客戶端與點對點消息提供者之間,客戶用它創建一個或者多個JMS隊列會話(QueueSession)

d.     隊列會話(QueueSession) – 用來創建隊列消息的發送者與接受者(QueueSenderand QueueReceiver)

e.消息發送者(QueueSender 或者MessageProducer)– 發送消息到已經聲明的隊列

f.消息接受者(QueueReceiver或者MessageConsumer) – 接受已經被發送到指定隊列的消息

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


 

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

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

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

c.鏈接主題(ConnectionTopic) – 一個活動的鏈接主題存在發布者與訂閱者之間

d.會話(TopicSession) – 用來創建主題消息的發布者與訂閱者 (TopicPublisher  and TopicSubscribers)

e.消息發送者MessageProducer) – 發送消息到已經聲明的主題

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

三:介紹ActiveMQ

ActiveMQ是apache社區完成的JMS開源消息組件,客戶端支持多種語言調用,包括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.     }  

項目配置,Jar依賴:

 

依賴的三個Jar分別為:

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

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

責任編輯:林師授 來源: jia20003的博客
相關推薦

2009-06-18 09:29:44

Spring Web

2015-07-23 10:54:09

Java Mybati框架

2017-09-16 17:45:32

數據采集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開發框架

2013-02-22 14:45:01

.NETC#Xcode

2011-07-01 15:28:26

PhoneGap代碼示例

2013-03-25 10:26:19

XML數據庫

2019-04-29 11:18:43

開源Sensu監控

2010-08-11 13:17:07

Flex框架

2009-07-02 10:27:20

JSP技術JSP入門

2009-06-22 14:13:08

JSF入門

2009-08-25 16:01:43

DataList控件入

2010-08-05 14:03:32

Flex框架

2011-04-21 10:59:44

SimpleFrameWeb

2017-07-18 15:13:17

2009-06-19 14:49:43

Spring框架

2011-11-08 10:36:42

Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人看人人干 | 色www精品视频在线观看 | 亚洲网站在线 | 亚洲一区中文字幕 | 在线亚洲欧美 | 欧美精品一区二区三区在线播放 | 在线免费毛片 | 国产精品久久毛片av大全日韩 | 国产一区二区三区四区 | 一级黄色片在线免费观看 | 国产精品av久久久久久久久久 | 日韩欧美国产不卡 | 欧美精品一区在线发布 | 日本字幕在线观看 | 日韩一区二区三区av | 久久久久香蕉视频 | 自拍偷拍中文字幕 | 亚洲欧美日韩电影 | 在线一区二区三区 | 国产成人叼嘿视频在线观看 | 亚洲视频一区二区三区四区 | 亚洲精彩视频在线观看 | 日韩高清中文字幕 | 国产精品不卡 | 性精品| 久久综合久久自在自线精品自 | 久久精品一区二区 | 国产精品综合视频 | 国产精品日产欧美久久久久 | 在线视频日韩 | 成人精品国产一区二区4080 | 欧美一区二区综合 | 天天澡天天操 | 欧美精三区欧美精三区 | 免费国产视频在线观看 | 精品一二区 | 欧美在线一级 | 久久久久国产 | 欧美二区在线 | 日韩欧美操 | 欧美日韩成人在线观看 |