ActiveMQ 是一種 Message-oriented middleware,主要是當作不同 process 或不同主機間的溝通媒介。
會用到 queue 的時機點有很多,就我個人工作上的範疇,通常是
1. Web server 短時間內遇到大量的 request,需要先接起來再由後端子系統處理,達到分散式架構
2. 這件事情本來就沒有很急,丟在 queue 裡面慢慢處理就好
類似 ActiveMQ 的 product 還有 RabbitMQ、ZeroMq,這邊列出了更多種的選擇。我的需求很基本,通常會考量幾個點:
1. 夠不夠 robust
2. Client端有沒有支援熟悉的語言 (C/C++, Java, .Net, Python, Php, Ruby, ...)
3. 文件寫得夠不夠清楚
4. 有在持續維護中
本來想用 C 來連接 ActiveMQ,但發現所有的 C library都沒在維護了,而且也沒 API 文件可以看,是有 C++ 的 ActiveMQ-CPP 可以用,但我不熟lol,最後選擇了 Python 的,pyactivemq也是一段時間沒更新了,重點是編譯不過,stomppy 或許是個不錯的選擇:)
訊息交換方式可以參考 Messaging pattern 裡面定義的,而我常用的也就下面兩種:
1. Push - Pull
2. Publish - Subscribe
這也是大多 product 都支援的
上述講得是 application 層的 ,至於 ActiveMQ 底層的傳輸 protocol 有二
1. STOMP (Streaming Text Oriented Messaging Protocol)
2. OpenWire protocol
差別在哪不是很清楚...只知道 stomp 是個大家熟知的標準,follow就對了!
意外發現一篇好文章,是在 promote ZeroMQ 的:
新世紀通訊函式庫 – ZeroMQ | 程式設計 遇上 小提琴
--
發現 ActiveMQ-CPP 裡面也有提供 C 的 interface,終於不用被 C++ 所擾,在 tar 檔裡面找不到,在 github 上才有,連結在此。