0
目前,我正在使用rabbitmq創建分佈式系統。如何從客戶端使用RabbitMQ獲取對象
我的目標是從IOS(RabbitMQ的)到服務器端(的RabbitMQ)發送的對象則只能做扇出隊列的所有訂戶
我寫的服務器,並已在客戶端
客戶端 - 出版商
@IBAction func bookTripClicked(_ sender: Any) {
if let user_id = keychain["id"] {
print("Attempting to connect to local RabbitMQ broker")
let conn = RMQConnection(uri: amqURL, delegate: RMQConnectionDelegateLogger())
conn.start()
let ch = conn.createChannel()
let q = ch.queue("book")
ch.defaultExchange().publish(user_id.data(using: .utf8), routingKey: q.name)
print(user_id)
}
}
客戶端將點擊一個按鈕,然後它會發送消息,但我對如何獲取剛剛發送給服務器的對象感到困惑。
服務器
var open = require('amqplib').connect('amqp://localhost');
var q = "book"
// Publisher
open.then(function(conn) {
return conn.createChannel();
}).then(function(ch) {
return ch.assertQueue(q).then(function(ok) {
return ch.sendToQueue(q, new Buffer(JSON.stringify("How do I get the object?")));
});
}).catch(console.warn);
客戶 - 消費者
func receive() {
print("Attempting to connect to local RabbitMQ broker") // Print the message
let conn = RMQConnection(uri: amqURL, delegate: RMQConnectionDelegateLogger())
conn.start()
let ch = conn.createChannel() // Create the channel name on the rabbitMQ Server
let q = ch.queue("book") // Queue the message in the channel || the name of the channel/queue
print("Waiting for the messages")
q.subscribe({(_ message: RMQMessage) -> Void in
print("Received \(String(data: message.body, encoding: String.Encoding.utf8)!)")
})
}
爲什麼我需要它要經過服務器,是因爲我想以後保存對象。我不能只刪除服務器端,它會在客戶端到客戶端之間正常工作,但我需要將JSON對象在將來保存在數據庫中
所以主要問題是如何獲取JSON對象在服務器端?
所以技術上在節點服務器端,我只需要創建一個消費者選項? – sinusGob
是的,你只需要在節點端的消費者 – raiyan
感謝您的答案 – sinusGob