Active MQ C++實現通訊
背景知識:
ActiveMQ是一個易於使用的消息中間件。
消息中間件
我們簡單的介紹一下消息中間件,對它有一個基本認識就好,消息中間件(MOM:Message Orient middleware)。
消息中間件有很多的用途和優點:
1. 將數據從一個應用程序傳送到另一個應用程序,或者從軟件的一個模塊傳送到另外一個模塊;
2. 負責建立網絡通信的通道,進行數據的可靠傳送。
3. 保證數據不重發,不丟失
4. 能夠實現跨平台操作,能夠為不同操作系統上的軟件集成技工數據傳送服務
MQ
首先簡單的介紹一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息隊列,干嘛用的呢,說白了就是一個消息的接受和轉發的容器,可用於消息推送。
下面進入我們今天的主題,為大家介紹ActiveMQ:
ActiveMQ
簡要概述ActiveMQ
Apache ActiveMQ ™ is the most popular and powerful open source messaging and Integration Patterns server.
Apache ActiveMQ is fast, supports many Cross Language Clients and Protocols, comes with easy to use Enterprise Integration Patterns and many advanced features while fully supporting JMS 1.1 and J2EE 1.4.
ActiveMQ是由Apache出品的,一款最流行的,能力強勁的開源消息總線。ActiveMQ是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現,它非常快速,支持多種語言的客戶端和協議,而且可以非常容易的嵌入到企業的應用環境中,並有許多高級功能。
什么情況下使用ActiveMQ?
- 多個項目之間集成
(1) 跨平台
(2) 多語言
(3) 多項目 - 降低系統間模塊的耦合度,解耦
(1) 軟件擴展性 - 系統前后端隔離
(1) 前后端隔離,屏蔽高安全區 - 多種語言和協議編寫客戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
- 完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)
- 對Spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統里面去,而且也支持Spring2.0的特性
- 通過了常見J2EE服務器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上
- 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
- 支持通過JDBC和journal提供高速的消息持久化
- 從設計上保證了高性能的集群,客戶端-服務器,點對點
- 支持Ajax
- 支持與Axis的整合
- 可以很容易得調用內嵌JMS provider,進行測試
ActiveMQ特性列表
ActiveMQ默認使用的TCP連接端口是61616
應用場景:
消息隊列在大型電子商務類網站,如京東、淘寶、去哪兒等網站有這深入的應用,隊列的主要作用是消除高並發訪問高峰,加快網站的響應速度。在不使用消息隊列的情況下,用戶的請求數據直接寫入數據庫,在高並發的情況下,會對數據庫造成巨大的壓力,同時也使得系統響應延遲加劇。在使用隊列后,用戶的請求發給隊列后立即返回(當然不能直接給用戶提示訂單提交成功,京東上提示:您“您提交了訂單,請等待系統確認”),再由消息隊列的消費者進程從消息隊列中獲取數據,異步寫入數據庫。由於消息隊列的服務處理速度遠快於數據庫,因此用戶的響應延遲可得到有效改善。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
操作步驟
1.下載版本
ActiveMQ-cpp-2.2.6
apr-1.6.2
apr-iconv-1.2.1
apr-util-1.6.0
2.路徑為D:\GCN\MQClient\Activemq-cpp\tags
去掉依賴庫的版本號
apr-util ,apr-1.6.2 ,apr-iconv
3.打開D:\GCN\MQClient\Activemq-cpp\tags\activemq-cpp-2.2.6\vs2005-build
編譯依賴關系為apr-util -》 apr-iconv -》 apr
- 注意事項
編譯到libaprutil的時候,Debug依賴於expat.lib, release依賴於xml.lib.
Debug:
E:\GCN\20170831SVN_MAIN\trunk\Product\MQClient\apr-util\xml\expat\lib
Release:
- 編譯vs2005-activemq
設置好依賴,附加庫頭文件,附加庫lib路徑。
- 編譯vs2005-activemq-example
配置文件:
Vs2005-activemq-cpp.exe
activemq.cfg
##### 全局配置參數######
host_id=35
node_id=3236
cmdline = 1
Consumer = 1(生產者和消費者切換)
#配置重啟
#reset_time = 0,20:00:00
reset_time = 06:15:00
sync_time = 0
sync_interval = 60
accept_sync_time = 0
#MQ配置
mq_url = tcp://10.1.6.2:61616
mq_user = jlt_mq
mq_pwd = jlt_mq123
mq_topic = jlt.srv.quote.engine.pubQuote.topic.queueName
#mq_topic = QUOTATION.WJF.TEST
#讀共享隊列
mem_que_name = QUEUE_MQ_SERVER
other_inst_multi = 1000
forex_inst_multi = 10000
#寫共享隊列
XQUE_NUM = 2
XQUE1.XQUE_NAME = MQ_QUOTATION3
XQUE1.WAIT_PERMIT = 10000
XQUE1.BUFFER_PERMIT = 10000
XQUE1.MAIN = 1
XQUE1.MODE = 1
XQUE2.XQUE_NAME = MQ_QUOTATION4
XQUE2.XQUE_TIMEOUT = 1000
XQUE2.WAIT_PERMIT = 10000
XQUE2.BUFFER_PERMIT = 10000
XQUE2.MAIN = 1
XQUE2.MODE = 1