OpenMQ C Client on Mac



筆記:build OpenMQ C Client with ssl 跟 implementation的注意事項
版本:OpenMQ-C Client v.4.5

在4.x之前的版本,C Client官方不支援Mac 平台,不過有好心人,把之前寫的patch給我們
ref: http://java.net/projects/mq/lists/users/archive/2012-11/message/3
(官方說5.0會把這項patch加進去)

要先去下載nspr跟nss (我是用nspr-4.9.3跟nss-3.1.4)
裡面步驟很詳細,就不再贅述


因為本身很少接觸open source的東西,一整包source code下載下來,很沒有頭緒,所以這裡來很簡單地介紹一下source code的目錄結構,此外他們不是用makefile是用ant 作為build的工具
src/share/cclient/                  ==> 這個就是 c client的source
                            /example/C --> 顧名思義,這裡就有範例啦~
src/buildant/                         ==> ant build的設定
                    /rules.xml          -->  ant會先吃這個設定檔,在根據裡面資訊去找別的xml
                    /crule.xml          -->  官方說,這個目前沒在用...看來他們對c client沒有很用力在maintain

其他沒用到的,就不清楚囉~ 有的就是文件,應該不用說明吧~
有興趣的也可以看這篇:
http://weblogs.java.net/blog/kalali/archive/2010/03/02/open-mq-open-source-message-queuing-beginners-and-professionals-0?force=159

client side的照好心人的步驟會產生出 libmqcrt.dylib,我是沒找到有.a或是.lib檔啦,所以....大家就要自己用動態load library了...可搜尋關鍵字, dlopen, dlsym
此外,libmqcrt.dylib會用到lib下的dylib,所以使用時,要把所有的dylib copy到你執行的目錄喔


SSL
如果你是走tcp連線,那照著example就沒問題了,如果你要走SSL,要照著以下步驟
1. Generate the NSS files certN.db, keyN.db, and secmod.db
    在好心人的step by step中,有一個lib資料夾,裡面有certutil,切換你的working directory或是把
    檔案copy出來皆可,執行以下command
     i. certutil -N -d <your dir>
     ii.certutil -A -n <certificate nickname> -t "p,p,p" -i <your certificate file> -d <your dir>
    <your certificate file> : 從server gen出的certificate,der format就OK,不用轉pem
    理論上會產生certN.db, keyN.db, secmod.dbpkcs11.txt在<your dir>下,不過我
    的secmod.db沒產生出來,我就去source下面某個目錄偷過來,好像也OK,事後實驗,沒有
    secmod.db好像也跑得好好的.....
    建db時會需要輸入密碼,如果不想手動輸入,可以加參數 -f <password file>,file裡就直接放
    密碼即可

2. 在client 建立connection前呼叫MQInitializeSSL(certpath),參數就是填你放上面那堆檔案跟
    certificate的路徑囉,所以需要把那一堆東西放在同一個路徑下

3. 在建立connection前還要設以下的參數
   MQ_CONNECTION_TYPE_PROPERTY :  SSL
    MQ_SSL_BROKER_IS_TRUSTED : false
    MQ_SSL_CHECK_BROKER_FINGERPRINT  : true
    MQ_SSL_BROKER_CERT_FINGERPRINT : <your certificate MD5, ex:F6:A5:C1:F2:E6:63:40:73:97:64:39:6C:1B:35:0F:8E>

注意!!
跟ActiveMQ-CPP一樣,client連線的URI要用host name,不能用IP
就是MQ_BROKER_HOST_PROPERTY的值要設host name


ref: http://docs.oracle.com/cd/E19879-01/821-0030/aelbl/index.html
http://docs.oracle.com/cd/E18930_01/html/821-2439/aelbg.html#aelbl

留言

這個網誌中的熱門文章

What's New in Ethereum Serenity (2.0)

瑞士滑雪分享2 - 策馬特

動手實做零知識 - circom