몇 가지 작업을 수행 할 수있는 컴퓨터가 여러 대 있습니다. 작업을 시작하기 위해 예를 들어 컴퓨터 ID "12345"라는 대기열에 메시지를 보내려고합니다.AMQP/RabbitMQ로 전용 큐로 메시지 보내기
다른 사람이 이러한 메시지를 사용하지 못하게하려면 큐가 독점적이어야합니다.
그러나 내 컨트롤러에서 큐를 소비하는 시스템에서 독점적으로 선언 된 경우 큐를 주장 할 수 없습니다. 그러나, 나는 주장하지 않고 그 이름을 지정하여 대기열로 보낼 수는 있지만 나쁜 습관이라고 생각하십니까?
기계는 다음과 같이 명령을 수신하는 : 나는 큐에 보낼 때
ch.assertQueue(machineID, {exclusive: true, durable: false}, function (err, q) {
if (err) console.log(err)
console.log("opened queue")
ch.consume(q.queue, function (message) {
console.log(message.content.toString())
})
})
, 그것은 클라이언트에서이 라인에 의한 독점 문제로 실패합니다
ch.assertQueue(machineID, {})
그러나 위의 줄에 주석을 달면 메시지를 보냅니다.
ch.sendToQueue(machineID, new Buffer(id.toString()))
이 문제를 해결하는 가장 효과적인 방법은 무엇입니까?
오류 메시지를 게시 하시겠습니까? –
405) RESOURCE_LOCKED - 잠긴 대기열에 대한 독점적 액세스를 얻을 수 없음 –
독점 대기열은 하나 이상의 사용자를 가질 수 없음을 의미합니다. 큐가 항상 소비자에 의해 생성되어야한다는 것을 안다면, 메시지를 보낼 때마다 큐를 생성 할 필요가 없습니다 (처음에는 큐를 생성하는 것이 더 좋습니다). 하나의 가능한 문제는'{exclusive : true, durable : false}'와'{}'(기본적으로 배타적 인 false)라는 서로 다른 매개 변수로 큐가 정의되고 일반적으로 실패합니다 - 매개 변수가 동일해야합니다. –