1. MQ 之 為什麼,何時使用ActiveMQ
1.2使用ActiveMQ:為什麼,何時
時間回到2003年,一群開源開發者集合在一起形成了Apache Geronimo。之後,他們發現當前沒有好用的使用BSD-style許可協議的消息代理器。Geronimo是由於java EE兼容性需要一個JMS實現。所以一些開發者開始討論其可能性。擁有豐富MOMs經驗甚至自己創建過一些MOMs的這些開發者開始創建下一個偉大的開源消息代理。ActiveMQ這么快開始是因為當時市場上大多數的MOMs是商業,閉源而且購買和支持昂貴。市場上的MOMs已經廣泛地被使用,但是一些商業行為是買不起如此昂貴的軟體。這使得創建一個開源MOMs的需求更加大。很明顯,有一個市場急需一個開源的使用Apache License的MOM。最終就導致了Apache ActiveMQ的誕生。
ActiveMQ遵循JMS規范,是為分布式應用遠程交流而創建的。為了理解這目的,最好就是去看一些分布式應用的設計和是交互。
1.2.1松耦合與ActiveMQ
ActiveMQ提供松耦合的應用架構。松耦合一般是為了減輕經典RPC(Remote Procere Calls)調用的緊耦合架構而被引入的。該松耦合以非同步形式存在,任何一個應用對ActiveMQ的調用不依賴於任何其它應用,沒有任何依賴或者時序要求。應用依賴於ActiveMQ的能力保證消息傳遞。因此,我們把應用發送消息的形式稱之為觸發和忘記(fire-and-forget)--應用發送消息到ActiveMQ之後並不關心消息如何或者什麼時候被傳遞。同樣的消息的接收者也不關心消息從哪裡或者如何到來。在不同的環境中這樣做的好處是允許客戶端使用不同的語言編寫甚至使用不同的線路協議。ActiveMQ作為中間人存在,允許不同環境的集成和非同步交互。更多內容將在下一節論述。
當我們考慮分布式應用設計時,耦合是很重要的。耦合是指兩個或多個應用間的相互依賴。考慮耦合的一個簡單辦法是思考其中某個應用改變所產生的影響,即其它應用所需要作出的改變。是否一個應用的變化會強制其它應用跟著改變?如果答案是肯定的,則這些應用是緊耦合的。如果一個應用的變化無需強制其它應用跟著改變,則這些應用是松耦合的。這說明了緊耦合系統比松耦合系統更難維護。也就是說,松耦合系統更能適應未知的變化。
在第二章我們將討論COM,CORBA,DCE和EJB等使用RPC的技術,它們是緊耦合的。使用RPC,當一個應用調用另一個應用,調用者將被阻塞知道被調用者返回結果。圖1.1描述了這個過程。
2. 消息隊列(mq)是什麼
是生產者先將消息投遞一個叫隊列的容器中,然後再從這個容器中取出消息,最後再轉發給消費者。
消息隊列是 Microsoft 的消息處理技術,它在任何安裝 Microsoft Windows 的計算機組合中,為任何應用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網路上或者是否同時聯機。
消息隊列網路是能夠相互間來回發送消息的任何一組計算機。網路中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發送消息,有些保存整個網路的重要信息,而有些只是發送和接收消息。
消息隊列的類型介紹:
消息隊列目前主要有兩種類型:POSIX消息隊列以及系統V消息隊列,系統V消息隊列目前被大量使用。每個消息隊列都有一個隊列頭,用結構struct msg_queue來描述。隊列頭中包含了該消息隊列的大量信息。包括消息隊列鍵值、用戶ID、組ID、消息隊列中消息數目等等。
消息隊列就是一個消息的鏈表,可以把消息看作一個記錄,具有特定的格式以及特定的優先順序。對消息隊列有寫許可權的進程可以向消息隊列中按照一定的規則添加新消息;對消息隊列有讀許可權的進程則可以從消息隊列中讀走消息。消息隊列是隨內核持續的。
3. mq 能用於c編程么
PCF就支持C呀!
MQ還提供了系統管理的編程介面,通過該介面用戶可以編寫應用程序從而進行自動化的實時監控及管理。MQ的系統管理介面有兩種,即Programmable Command Format(可編程命令格式,簡稱PCF)和MQ Administration Interface(MQ管理介面,簡稱MQAI)。
關於WebSphere MQ 可編程命令格式(PCF)
WebSphere MQ 可編程命令格式(PCF)命令使得管理任務能編寫到應用程序中,在程序中可以創建隊列、進程等對象的定義以及更改對象的屬性等。
PCF定義了命令和回復消息,應用程序通過這些命令和回復消息實現和隊列管理器之間的信息交換,PCF 命令和MQSC 命令具有相同的命令集,所有通過MQSC命令能夠實現的功能,通過PCF都可以實現,因此,通過WebSphere MQ的應用程序可以實現對MQ對象的管理包括:隊列管理器,進程定義,隊列和通道等。PCF命令可以被發送到本地隊列管理器的命令隊列,也可以被發送到某個遠程隊列管理器的命令隊列,因此,應用程序可以通過一個本地隊列管理器集中管理網路中的任何本地和遠程管理器。
MQ的遠程管理機制底層就是通過PCF這種方式的,在互相聯接的系統中的任意一個節點都可以進行對其他所有節點的配置和管理,這種情形的典型應用就是通過一台Windows操作系統的機器來管理全網的MQ節點。由於MQ在Windows XP/NT/2000平台上提供了圖形界面的管理工具,我們可以把一個節點設成管理機,利用管理機可以監控和配置網路中的任一節點,監測和顯示整個網路中任何一個節點上的伺服器及其各種對象的狀態和運行情況,從而實現對中間件的集中管理和監控。
每一個隊列管理器有一個名為SYSTEM.ADMIN.COMMAND.QUEUE的管理隊列,應用程序可以按照PCF命令消息格式封裝的要求,組成PCF消息,並將該PCF命令消息發送到管理隊列中,同時,每一個隊列管理器也有一個命令伺服器(Command Server),它為管理隊列中的消息提供服務,在我們使用MQ的控制命令strmqcsv啟動命令伺服器之後,它將監控管理隊列,一旦該隊列中有PCF消息到達,它將讀取該消息,並解釋執行。因此在網路中的任何隊列管理器都可以處理PCF消息,通過使用指定的回復隊列,回復消息可以被返回給應用程序,應用程序可以獲知PCF命令執行成功與否。回復隊列由命令消息的消息描述符(MQMD)中的ReplyToQ和ReplyToQMgr兩個欄位來指定。
PCF命令和回復消息是使用MQ相應的編程介面進行發送和接收的,以C語言為例,我們只需要使用MQPUT將PCF命令消息發送到相應的管理隊列,使用MQGET將PCF回復消息從相應的回復隊列中取出即可。這里的關鍵就是如何封裝PCF消息。每個MQ指令及其相關參數都是一條單獨的命令消息,每個命令消息由PCF頭和若干個參數結構塊組成,每個參數結構塊提供了命令的參數。回復消息的結構與命令消息相同,但是回復消息的個數根據不同的情況可能會有多個,例如:如果我們查詢某個隊列管理器下所有本地隊列的屬性,假設本地隊列有10個,那麼我們將得到10個回復消息,PCF頭中的Control欄位MQCFC_NOT_LAST和MQCFC_LAST將用於區分是否為最後一個回復消息。
PCF編程介面支持C,Visual Basic, COBOL, RPG, PL/1和Java等,其中在我們最常用的編程語言中,C和Visual Basic編程在PCF的封裝上相對Java將會略微復雜一些
4. IBM MQ是什麼
IBM MQ
消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。
IBM WebSphere MQ 產品支持應用程序通過不同組件如處理器、子系統、操作系統以及通信協議的網路彼此進行通信。例如,IBM WebSphere MQ 支持 35 種以上的不同操作系統。
IBM WebSphere MQ 支持兩種不同的應用程序編程介面:Java 消息服務(JMS)和消息隊列介面(MQI)。在 IBM WebSphere MQ 伺服器上,JMS 綁定方式被映射到 MQI。如圖 3 所示,應用程序直接與其本地隊列管理器通過使用 MQI 進行對話,MQI 是一組要求隊列管理器提供服務的調用。MQI 的引人之處是它只提供 13 次調用。這意味著對於應用程序編程員它是一種非常易於使用的介面,因為大部分艱苦工作都將透明完成的
5. mql4編輯器設置語言
首先,進入「MQ語言編輯器」頁面。
然後,新建一個EA交易,輸入好命名,一路默認確定就好。
6. EX4文件 轉 MQ4文件
一、如何將mq4文件轉換為ex4文件,mq4文件編譯為ex4可執行文件有兩種方法:
1、MT4啟動時,會自動把此目錄中的mq4文件編譯為ex4文件。
2、用MQ語言編輯器打開mq4文件,點一下「編寫」按鈕,即可生成ex4文件。
二、下載保存mq4文件、ex4文件
在論壇上我們經常看到有mq4文件、ex4文件可供下載,我們只要把它們保存到C:\Program Files\MetaTrader 4\experts\indicators這個目錄,也就是下面這個目錄中,就可以了。如果下載的是ex4文件,那可以直接調用;如果是mq4文件,則需要重啟動MT4,讓系統自動編譯生成ex4可執行文件。如果下載的是rar、zip等類型的壓縮文件,還必須下載後解壓到此目錄才能使用。
三、將源碼保存為源碼文件
外匯交易,在論壇上,我們也經常能看到指標源碼貼在網頁上,但沒有mq4、ex4等文件可以下載,只能復制源碼。此時需要我們自己動手將源碼保存為源碼文件,那也沒關系,非常地簡單,多點幾下滑鼠就搞定。
1、打開MQ語言編輯器。
2、在MQ語言編輯器中新建一個文件,文件名一定要輸,別的隨便操作都沒關系。
3、刪除新文件裡面的所有內容,成為一個空文件。
4、接著我們就可以將網頁上源碼復制粘貼進來。
試著點一下「編寫」,如果左下角出現「0錯誤,0警告」,那說明源碼沒問題,編譯通過了,成功生成了ex4可執行文件。
5、還有很重要的一點,就是要把源碼文件保存到正確的目錄中。
7. MT4平台上如何把.ex4的文件轉換為.mq4的文件
一、如何將mq4文件轉換為ex4文件,mq4文件編譯為ex4可執行文件有兩種方法:
1、MT4啟動時,會自動把此目錄中的mq4文件編譯為ex4文件。
2、用MQ語言編輯器打開mq4文件,點一下「編寫」按鈕,即可生成ex4文件。
二、下載保存mq4文件、ex4文件
在論壇上我們經常看到有mq4文件、ex4文件可供下載,我們只要把它們保存到C:\Program Files\MetaTrader 4\experts\indicators這個目錄,也就是下面這個目錄中,就可以了。如果下載的是ex4文件,那可以直接調用;如果是mq4文件,則需要重啟動MT4,讓系統自動編譯生成ex4可執行文件。如果下載的是rar、zip等類型的壓縮文件,還必須下載後解壓到此目錄才能使用。
三、將源碼保存為源碼文件
外匯交易,在論壇上,我們也經常能看到指標源碼貼在網頁上,但沒有mq4、ex4等文件可以下載,只能復制源碼。此時需要我們自己動手將源碼保存為源碼文件,那也沒關系,非常地簡單,多點幾下滑鼠就搞定。
1、打開MQ語言編輯器。
2、在MQ語言編輯器中新建一個文件,文件名一定要輸,別的隨便操作都沒關系。
3、刪除新文件裡面的所有內容,成為一個空文件。
4、接著我們就可以將網頁上源碼復制粘貼進來。
試著點一下「編寫」,如果左下角出現「0錯誤,0警告」,那說明源碼沒問題,編譯通過了,成功生成了ex4可執行文件。
5、還有很重要的一點,就是要把源碼文件保存到正確的目錄中。
8. 如何用metatrader自帶的編輯器metaeditor編譯
1.首先,你要有一個EA,必須要有以ex4為擴展名的,如果只有mq4文件的話,就要用MetaTrader自帶的編輯器MetaEditor打開(主菜單命令「工具—MQ語言編輯器」或者是快捷鍵F4完成同樣操作),將mq4通過編譯(compile)並且要不出現錯誤,才能在原存放mq4的文件夾下面得到一個同名的ex4文件。
2.將這個ex4文件復制到MetaTrader
4所在的文件夾下面的experts文件夾下,比如:C:\Program Files\FxPro
MetaTrader\experts,關閉並重新打開MetaTrader 4。
3.在「導航」下面的「智能交易系統」下面右鍵點擊你想要使用的EA,這里以10點盈利系統舉例,點「附加到圖表」,如:
4.將會出現下面的彈出窗口:
特別要注意這里的選擇,如果沒有鉤選「允許實時自動交易」,那麼你的智能系統就不會自動交易。
5.在自動成交方面,MT4還有一個總開關,就是「工具」菜單下面的「選項」中:
6.還有一個地方必須選擇「啟動」:
上圖最後面的變成這樣的就是已經啟動了智能交易系統。
7.在完成了上面的所有設置後,看看你的圖表的右上角一定會出現你的智能交易系統的文件名和一個笑臉。
出現這樣就算是當前的圖表已經啟用了智能交易系統了。這時,你就可以去睡覺或者去喝酒喝茶健身了。
8.如果你要停止你的智能交易系統,最好的辦法是點擊這個圖上面的「智能交易」圖標。
如果只要停止當前圖表上面的EA,你應該按 F7
鍵,就會彈出如下的窗口:
點擊將「允許實時自動交易」前面的鉤去掉,然後確定,這樣就使當前圖表上面的EA停止了。圖表上面會出現「哭喪的臉」: