會用到 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 上才有,連結在此。
編譯 ActiveMQ-CPP
需要 Apache Portable Runtime 支援,我使用的版本搭配如下:
activemq-cpp-library-3.4.x (直接從 github 抓下來)
apr-1.3.12
apr-util-1.3.12
$ cd apache-activemq-cpp/activemq-cpp $ ./autogen.sh ... configure.ac:239: the top level configure.ac: installing `config/install-sh' configure.ac: installing `config/missing' src/examples/Makefile.am: installing `config/depcomp' src/main/Makefile.am: C objects in subdir but `AM_PROG_CC_C_O' not in `configure.ac' src/main/Makefile.am: installing `config/compile' autoreconf: automake failed with exit status: 1 $ vim configure.ac ... AC_PROG_CC AC_PROG_CXX +AM_PROG_CC_C_O AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL $ ./autogen.sh $ ./configure --with-apr=/opt/apr-1.3.12 --with-apr-util=/opt/apr-util-1.3.12 --prefix=/opt/activemq-cpp $ make && make install
編譯 ActiveMQ-C
apr 版本限制 1.3.x,太高太低都不行
$ cd apache-activemq-cpp/activemq-c $ ./autogen.sh aclocal: couldn't open directory `config': No such file or directory autoreconf: aclocal failed with exit status: 1 $ mkdir config $ ./autogen.sh configure.ac:82: the top level configure.ac: installing `config/install-sh' configure.ac: installing `config/missing' src/examples/Makefile.am: C objects in subdir but `AM_PROG_CC_C_O' not in `configure.ac' src/examples/Makefile.am: installing `config/compile' src/examples/Makefile.am: installing `config/depcomp' autoreconf: automake failed with exit status: 1 $ vim configure.ac AC_PROG_CC AC_PROG_CXX +AM_PROG_CC_C_O AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL $ ./autogen.sh $ ./configure --with-activemqcpp=/opt/activemq-cpp --with-apr=/opt/apr-1.3.12 --with-apr-util=/opt/apr-util-1.3.12 --prefix=/opt/activemq-c $ make && make install測試 sample code
$ cd apache-activemq-cpp/activemq-c/src/examples/producers $ gcc -o SimpleProducer SimpleProducer.c -I/opt/activemq-c/include/activemq-c-3.3.0 -I/opt/apr-1.3.12/include -L/opt/activemq-c/lib -L/opt/apr-1.3.12/lib -lactivemq-c -lapr-1 $ LD_LIBRARY_PATH=/opt/activemq-c/lib:/opt/activemq-cpp/lib:/opt/apr-1.3.12/lib ./SimpleProducer ===================================================== Starting the SimpleProducer: ----------------------------------------------------- ----------------------------------------------------- Finished with the SimpleProducer. =====================================================Good, it's work!
沒有留言:
張貼留言