1. 程式人生 > >PB 傳送訊息到Rabbit M Q

PB 傳送訊息到Rabbit M Q

說起PB 老古董了, 糾結了好久, PB人員說不會連線 MQ 。 這個事情拖了快一年了。
最近實在忍不過去了, 只能我這個 .net 程式設計師出手了。

百度了一下pb的語法和入門教程。
然後找了下RabbitMQ的手冊。 發現向RabbitMQ傳送訊息可以通過兩種方法,
一種是官方自定義的AMQP協議, 這種協議是基於Socket的, 要解析資料包,還得會Socket程式設計。 主要是PB俺不熟悉, 裡面牽扯到一大堆的字串解析分割,之類的操作。很麻煩。

另外一種是RabbitMQ 自帶的HTTP管理客戶端,對外開放了HTTP API, 研究了一下, 發現HTTPAPI 支援推送訊息到RabbitMQ 這種模式比較簡單無需解析Socket的AMQP協議, 雖然慢了那麼一點點, 但是對於我們這種企業內部的系統來講, 這點效能損耗完全不影響。

經過一翻的折騰, 最後搞定了。

OLEObject dom, http
String Http_Name,result,ls_args
//注意這裡的%2F是  vhost為/的對應值 所以這個 %2F 代表 / 
Http_Name = "http://192.168.20.207:15672/api/exchanges/%2F/amq.topic/publish"
//Http_Name = "http://192.168.20.207:15672/api/nodes"
//dom = CREATE OLEObject
http = CREATE OLEObject
http.ConnectToNewObject("Msxml2.XMLHTTP"
) ls_args = '{"properties":{},"routing_key":"[email protected]改成自己的key","payload":"具體的訊息內容,自己處理吧","payload_encoding":"string"}' //ls_args = '' http.Open( "POST", Http_Name, TRUE) http.setrequestheader("Content-type","application/json") http.setrequestheader("Authorization","Basic TUtNUTpNS01R") //TUtNUTpNS01R 是在 http://tool.oschina.net/encrypt?type=3 對 "使用者名稱:密碼" 進行base64加密後的字串
http.setrequestheader("Content-Length",string( Len(ls_args) ) ) http.Send(ls_args) do While http.readyState <> 4 // ' 查詢狀態,延時 yield() Loop result = http.responseText //這個測試用! 你可不寫 messagebox( 'result ',result)