ActiveMQ 消息管理 JVM調優 火推1909

ActiveMQ 消息管理(機制)

ActiveMQ簡介

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個徹底支持JMS1.1和J2EE 1.4規範的 JMS Provider實現.

JMS 簡介

  • JMS(Java Message Service),即:java消息服務應用程序接口。
  • 是Java平臺面向消息中間件(MOM)的API/技術規範。
  • 場景:應用與兩個應用程序之間,或者分佈式系統架構中分發消息,可進行異步/同步方式的通信,和平臺API無關,基本多數的MOM都提供對JMS的支持

JMS 體系架構

  • JMS提供者css

    鏈接面向消息中間件的,JMS接口的一個實現。提供者能夠是Java平臺的JMS實現,也能夠是非Java平臺的面向消息中間件的適配器。html

  • JMS客戶前端

    生產或消費基於消息的Java的應用程序或對象。java

  • JMS生產者mysql

    建立併發送消息的JMS客戶。nginx

  • JMS消費者web

    接收消息的JMS客戶。算法

  • JMS消息spring

    包括能夠在JMS客戶之間傳遞的數據的對象。sql

  • JMS隊列

    一個容納那些被髮送的等待閱讀的消息的區域。與隊列名字所暗示的意思不一樣,消息的接受順序並不必定要與消息的發送順序相同。一旦一個消息被閱讀,該消息將被從隊列中移走。

  • JMS主題

    一種支持發送消息給多個訂閱者的機制。

JMS 屬性

  • Destination(接口/目標)
  • Product(生產者)
  • Consumer(消費者)
  • Broker(消息轉發器)
  • P2P,Pub/Sub(模型)
  • P2P:消息隊列(Queue)、發送者(Sender)、接收者(Receiver)

    Pub/Sub:主題(Topic)、發佈者(Publisher)、訂閱者(Subscriber)

ActiveMQ與JMS關係

JMS是一種規範
ActiveMQ是JMS規範的一種實現

AvtiveMQ架構圖

ActiveMQ主要特性

(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…)

ActiveMQ功能

- 多種協議
- 持久化
- 安全
- 集羣
- 監控
- 其餘

AvtiveMQ多種協議

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

ActiveMQ持久化

日誌:

<journaledJDBC journalLogFiles="5"dataDirectory="../mq-data" />

數據庫:

包括: Derby,HSQL,MySQL,SQLServer, Sybase,DB2,Oracle…
    <journaledJDBC  dataSource="#mysql-ds"/>

ActiveMQ安全

認證

simpleAuthenticationPlugin
jaasAuthenticationPlugin

受權

authorizationPlugin

ActiveMQ集羣

  • Master/Slave

  • Network of Brokers

ActiveMQ監控

  • JMX(Java管理擴展框架)

  • Advisory Message(通知消息)

Queue與Topic區別

使用ActiveMQ做爲實現JMS中間件優勢

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,進行測試

ActiveMQ關鍵詞

  • ActiveMQConnectionFactory:

    實現了jms的ConnectionFactory,Connection的工廠類
  • Connection :

    JMS鏈接,和Java鏈接池的Connection差很少  Producer和Consumer用來和Broker通信的
  • Session :

    會話
  • Destination :

    目的地,數據要發送到哪裏或者從哪裏取
  • MessageProducer:

    生產者
  • MessageConsumer :

    消費者
  • Message :

    消息,add到隊列的東西,也就是本身要處理的東西,Message有不少子接口,TextMessage或ByteMessage

ActiveMQ目錄說明

bin:存放的是腳本文件
conf :存放的是基本配置文件     
data :存放的是日誌文件
docs :存放的是說明文檔
examples :存放的是簡單的實例
lib :存放的是activemq所需jar包
webapps :用於存放項目的目錄

ActiveMQ應用場景

ActiveMQ入門案例1

  • 建立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

  • 觀察運行結果

ActiveMQ入門案例2(集成spring)

  • 建立一個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

https://mp.weixin.qq.com/s?_biz=MzIxMjg4NDU1NA==&mid=2247483908&idx=1&sn=532230159d74893cb3c6d402e4552127&chksm=97be0f21a0c9863748d126999b6678b3d7c5f1bcad12f630ea24e526e6dee8cb0248808ca60b&scene=21#wechatredirect

JVM如何進行調優

lucene、solr全文搜索

相關文章
相關標籤/搜索