ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個徹底支持JMS1.1和J2EE 1.4規範的 JMS Provider實現.
JMS提供者css
鏈接面向消息中間件的,JMS接口的一個實現。提供者能夠是Java平臺的JMS實現,也能夠是非Java平臺的面向消息中間件的適配器。html
JMS客戶前端
生產或消費基於消息的Java的應用程序或對象。java
JMS生產者mysql
建立併發送消息的JMS客戶。nginx
JMS消費者web
接收消息的JMS客戶。算法
JMS消息spring
包括能夠在JMS客戶之間傳遞的數據的對象。sql
JMS隊列
一個容納那些被髮送的等待閱讀的消息的區域。與隊列名字所暗示的意思不一樣,消息的接受順序並不必定要與消息的發送順序相同。一旦一個消息被閱讀,該消息將被從隊列中移走。
JMS主題
一種支持發送消息給多個訂閱者的機制。
P2P:消息隊列(Queue)、發送者(Sender)、接收者(Receiver)
Pub/Sub:主題(Topic)、發佈者(Publisher)、訂閱者(Subscriber)
JMS是一種規範 ActiveMQ是JMS規範的一種實現
(1)JMS1.一、J2EE1.4 (2)J2EE servers(Tomcat,JBoss4,GlassFish,WebLogic…) (3)多語言客戶端(Java,C,C++,C#,Ruby,PhP) (4)多種協議(VM,TCP,SSL,UDP,multicast,JGroups…) (5)Spring (6)Ajax (7)CXF,Axis(WebService的兩個流行的框架) (8)REST(狀態傳遞) (9)Message Groups,Virtual Destinations,Wildcards,Composite , Destinations (10)持久化(journal,JDBC) (11)性能(client-server,cluster,peer…)
- 多種協議 - 持久化 - 安全 - 集羣 - 監控 - 其餘
URI: scheme:scheme-specific-part
eg:
VM vm://brokername TCP tcp://host:port SSL ssl://host:port HTTP http://host:port UDP udp://host:port peer peer://group/brokername multicast multicast://IPAddress static static(list uris) failover failvoer(list uris) discovery discovery://host:port
日誌:
<journaledJDBC journalLogFiles="5"dataDirectory="../mq-data" />
數據庫:
包括: Derby,HSQL,MySQL,SQLServer, Sybase,DB2,Oracle… <journaledJDBC dataSource="#mysql-ds"/>
認證
simpleAuthenticationPlugin jaasAuthenticationPlugin
受權
authorizationPlugin
Master/Slave
Network of Brokers
JMX(Java管理擴展框架)
Advisory Message(通知消息)
1.多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Python, PHP。 2.徹底支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務) 3.對Spring的支持,ActiveMQ能夠很容易內嵌到使用Spring的系統裏面去,並且也支持Spring2.0的特性 4.徹底支持JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務) 5.經過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中經過JCA 1.5 resource adaptors的配置,可讓ActiveMQ能夠自動的部署到任何兼容J2EE 1.4 商業服務器上 6.支持多種傳送協議 7.從設計上保證了高性能的集羣,客戶端-服務器,點對點 8.支持Ajax 9.支持與Axis的整合 10.能夠很容易得調用內嵌JMS provider,進行測試
ActiveMQConnectionFactory:
實現了jms的ConnectionFactory,Connection的工廠類
Connection :
JMS鏈接,和Java鏈接池的Connection差很少 Producer和Consumer用來和Broker通信的
Session :
會話
Destination :
目的地,數據要發送到哪裏或者從哪裏取
MessageProducer:
生產者
MessageConsumer :
消費者
Message :
消息,add到隊列的東西,也就是本身要處理的東西,Message有不少子接口,TextMessage或ByteMessage
bin:存放的是腳本文件 conf :存放的是基本配置文件 data :存放的是日誌文件 docs :存放的是說明文檔 examples :存放的是簡單的實例 lib :存放的是activemq所需jar包 webapps :用於存放項目的目錄
建立web project工程
引入MQ相關jar包
activeio-core-3.1.4.jar activemq-all-5.13.2.jar activemq-pool-5.13.2.jar commons-pool2-2.4.2.jar
建立生產者
/** * 消息的生產者(提供者),用於發送消息 * @author likang * @date 2017-12-21 上午9:55:47 */ public class Product { private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//使用默認的用戶名 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默認的密碼 private static final String URL = ActiveMQConnection.DEFAULT_BROKER_URL;//默認的鏈接地址 public static void main(String[] args) { ConnectionFactory connectionFactory ;//鏈接工廠 Connection connection;//鏈接 Session session;//會話 Destination destination;//消息目標 MessageProducer messageProducer;//消息的生產者 connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, URL);//初始化鏈接工廠 try { connection = connectionFactory.createConnection();//建立鏈接 connection.start();//啓動鏈接信息 /** * boolean參數1:若是是true,則表明開啓事務。參數2則能夠取如下前3種 * 若是是false,則表明不開啓事務。參數2則能夠取如下4種 * * int 參數2:AUTO_ACKNOWLEDGE---客戶端無需作任何副本操做,就能夠獲取消息信息(自動裝配模式) * CLIENT_ACKNOWLEDGE---客戶端須要作操做確認,才能夠獲取消息 * DUPS_OK_ACKNOWLEDGE---是無需任何副本操做 * SESSION_TRANSACTED----只有在第一個參數使用false的時候,纔可使用 * */ session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE); destination = session.createQueue("java12");//選擇協議主題,而且初始化主題名稱 messageProducer = session.createProducer(destination);//建立生產者 sendMessage(messageProducer,session);//發送消息 session.commit();//提交消息到MQ容器中 } catch (Exception e) { } } /** * 發送消息內容 * @param messageProducer * @param session * @throws JMSException */ private static void sendMessage(MessageProducer messageProducer,Session session) throws JMSException { for (int i = 0; i < 10; i++) { TextMessage tx = session.createTextMessage("ActiveMQ 發送消息" + i); System.out.println("生產者發送消息內容爲:" + tx.getText()); messageProducer.send(tx); } } }
建立消費者
/** * 消息的接受者(消費者) * @author likang * @date 2017-12-21 上午10:12:37 */ public class Columer { private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;//使用默認的用戶名 private static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;//默認的密碼 private static final String URL = ActiveMQConnection.DEFAULT_BROKER_URL;//默認的鏈接地址 public static void main(String[] args) { ConnectionFactory connectionFactory ;//鏈接工廠 Connection connection;//鏈接 Session session;//會話 Destination destination;//消息目標 MessageConsumer messageConsumer;//消息的消費者 connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, URL);//初始化鏈接工廠 try { connection = connectionFactory.createConnection();//建立鏈接 connection.start();//啓動鏈接信息 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); destination = session.createQueue("java12");//選擇協議主題,而且初始化主題名稱 messageConsumer = session.createConsumer(destination);//建立消費者 while(true){ // TextMessage tx = session.createTextMessage();//接收消息 TextMessage tx = (TextMessage) messageConsumer.receive(1000000);//100S if (tx != null) { System.out.println("消費者接收消息內容爲:"+tx.getText()); }else{ break; } } } catch (Exception e) { } } }
啓動ActiveMQ服務
雙擊啓動服務
運行生產者
執行main方法
運行消費者
執行main方法
進入ActiveMQ後臺監控系統
地址:http://localhost:8161/admin/queues.jsp
建立一個web project工程
導入所需jar包
增長配置文件信息
web.xml、spring-mvc.xml、applicationContext.xml、ActiveMQ.xml
增長ActiveMQ配置文件信息
配置ActiveMQ的鏈接工廠 配置Spring 的Cache工廠 定義JmsTemplate的Queue類型 定義JmsTemplate的Topic類型 定義Queue監聽 定義Topic監聽
測試地址
URL:http://localhost:8161/admin/ 前端測試頁面地址:http://localhost/ActiveMQSpringDemo/index.jsp
物理層:
以太網·調制解調器·電力線通訊(PLC)·SONET/SDH · 光導纖維等
數據鏈路層:
Wi-Fi(IEEE 802.11) · ATM · DTM · 令牌環·以太網· GPRS · HDLC · PPP · L2TP ·PPTP ·STP 等
網絡層協議:
IP (IPv4 · IPv6) · ICMP· ICMPv6·IGMP ·IS-IS · ARP · RARP等
傳輸層協議:
TCP · UDP · TLS · DCCP · SCTP · RSVP 等
應用層協議:
HTTP · POP3 · RPC · DHCP · DNS · FTP · IMAP4 · IRC · XMPP · SMTP · SNMP · SSH · RTP · SOAP等
負載量:
通常是取一個時間段內的負載量
併發量:
是取同一個時刻的操做人數(求平均數)
動靜分離:
html----jeecms內容管理系統 css/img/js等等----負載均衡層(nginx)
算法:
MD5: 對稱加密: AES:更安全 非對稱加密: 支付加密算法: RSA/RSA2