PB 傳送訊息到Rabbit M Q
阿新 • • 發佈:2018-11-16
說起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)