2012-06-21 2 views
0

kaazing javascript AMPQ 라이브러리를 통해 게시 메시지를 보낼 수 없습니다. 아래의 코드는 FANOUT 교환기에서 완벽하게 작동하지만 직접 교환기에서는 작동하지 않습니다. 연결할 수는 있지만 직접 교환기에 메시지를 게시 할 수 없습니다.kaazing javascript 라이브러리를 통해 rabbitMQ DIRECT 교환을 사용하는 중에 오류가 발생했습니다.

function amqpTest(){ 
load(); 
var $ = function(s) { return document.getElementById(s); }; 
var console = $("console"); 

var log = function(message){ 
var pre = document.createElement("pre"); 
pre.style.wordWrap = "break-word"; 
pre.innerHTML = message; 
console.insertBefore(pre, console.firstChild); 
while(console.childNodes.length > 500){ 
console.removeChild(console.lastChild); 
} 
} 

var url = "ws://localhost:8000/amqp"; 
var username = "guest"; 
var password = "guest"; 
var connect = $("connect"); 
var disconnect= $("disconnect"); 

var consumeExchange = "demo_direct_exchange"; 
var consumeMessageText = "call"; 
var alias = "player"; 

var myQueueName = "clientqueue"; 
var myConsumerTag = "clientkey"; 
var routingKey = "broadcastkey"; 
var exchangeName = consumeExchange; 
var send = $("send"); 

connect.onclick = function(){ 
log("Connecting: "+ url + " " + username); 
myQueueName = "client" + Math.floor(Math.random() * 1000000); 
myConsumerTag = "client" + Math.floor(Math.random() * 1000000); 

var version = "0-9-0"; 
amqp = new AmqpClient(); 
amqp.addEventListener("close", function(){ 
log("Disconnected"); 
}); 

amqp.connect(url, '/', {username:username, password:password}, version, openHandler); 
} 

var openHandler = function(){ 
log("CONNECTED"); 
log("Open Publish Channel..."); 
publishChannel = amqp.openChannel(publishChannelOpenHandler); 
log("Open Consume Channel..."); 
consumeChannel = amqp.openChannel(consumeChannelOpenHandler); 
}; 

var publishChannelOpenHandler = function(channel) { 
log("Opened Publish Channel"); 
publishChannel.declareExchange(exchangeName, "direct", false, false, false); 
publishChannel.addEventListener("declareexchange", function(){log("Exchange Declared : "+exchangeName)}); 
publishChannel.addEventListener("close", function() { log("Channel Closed : Publish Channel")}); 

}; 

var consumeChannelOpenHandler = function(channel) { 
log("Opened Consumed Channel"); 
consumeChannel.addEventListener("declarequeue", function(){ log("Queue Declared : " +myQueueName); }); 
consumeChannel.addEventListener("bindqueue", function() { log("QUEUE BOUND: " + exchangeName + " " + myQueueName)}); 
consumeChannel.addEventListener("subscribe", function() { log("CONSUME: " + myQueueName)}); 
consumeChannel.addEventListener("close", function() {log("CHANNEL CLOSED: consume channel");}); 
     consumeChannel.addEventListener("message", messageHandler); 

consumeChannel.declareQueue(myQueueName, false, false, false, false, false) 
.bindQueue(myQueueName, exchangeName, routingKey, false) 
.consumeBasic(myQueueName, myConsumerTag, false, true, true, false); 
} 

var messageHandler = function(m){ 
alert("A"); 
var body = m.body.getString(Charset.UTF8); 


if (body == "start_auction"){ 
ss(); 
} 
if (body == "new_bidder"){ 
alert("New Bidder"); 
} 

//log(body); 
}; 

disconnect.onclick = function() { 
log("DISCONNECT"); 
amqp.disconnect(); 
}; 

send.onclick = function(){ 
log ("SENDING MESSAGE ...."); 
var body = new ByteBuffer(); 
body.putString("new_bidder", Charset.UTF8); 
body.flip(); 
var headers = {}; 
publishChannel.publishBasic(body, headers, consumeExchange, routingKey, false, false); 

}; 

$("clear").onclick = function() { while (console.childNodes.length > 0) 
{ 
console.removeChild(console.lastChild); 
} 
}; 

} 

어떤 도움을 주시면 감사하겠습니다.

답변

0

가져 오기 ... 이미 교환으로 declareExchange에 대한 코드를 제거해야했습니다. 그러나 이상한 오류는 팬 아웃이 아닌 직접 교환을 위해서만 발생했습니다. :)