node.js - Operation failed: ExchangeBind; 404 (NOT-FOUND) with message "NOT_FOUND - no exchange 'dead.letters-q.1' -


as referenced in previous question, i'm trying use wascally npm package meteor , it's throwing seems setup/config error exchanges

w20150925-14:22:34.692(-4)? (stderr)  w20150925-14:22:34.693(-4)? (stderr) /users/rkstar/dev/projects/wacoosta/.meteor/local/isopacks/npm-container/npm/node_modules/wascally/node_modules/when/lib/fatal.js:12 w20150925-14:22:34.693(-4)? (stderr)            throw e; w20150925-14:22:34.693(-4)? (stderr)                  ^ w20150925-14:22:34.694(-4)? (stderr) error: operation failed: exchangebind; 404 (not-found) message "not_found - no exchange 'dead.letters-q.1' in vhost 'jzywgjfv'" w20150925-14:22:34.694(-4)? (stderr)     @ reply (/users/rkstar/dev/projects/wacoosta/.meteor/local/isopacks/npm-container/npm/node_modules/wascally/node_modules/amqplib/lib/channel.js:126:17) w20150925-14:22:34.694(-4)? (stderr)     @ channel.c.accept (/users/rkstar/dev/projects/wacoosta/.meteor/local/isopacks/npm-container/npm/node_modules/wascally/node_modules/amqplib/lib/channel.js:399:7) w20150925-14:22:34.694(-4)? (stderr)     @ connection.mainaccept [as accept] (/users/rkstar/dev/projects/wacoosta/.meteor/local/isopacks/npm-container/npm/node_modules/wascally/node_modules/amqplib/lib/connection.js:62:33) w20150925-14:22:34.694(-4)? (stderr)     @ socket.go (/users/rkstar/dev/projects/wacoosta/.meteor/local/isopacks/npm-container/npm/node_modules/wascally/node_modules/amqplib/lib/connection.js:465:48) w20150925-14:22:34.694(-4)? (stderr)     @ socket.emit (events.js:92:17) w20150925-14:22:34.694(-4)? (stderr)     @ emitreadable_ (_stream_readable.js:427:10) w20150925-14:22:34.694(-4)? (stderr)     @ emitreadable (_stream_readable.js:423:5) w20150925-14:22:34.694(-4)? (stderr)     @ readableaddchunk (_stream_readable.js:166:9) w20150925-14:22:34.695(-4)? (stderr)     @ socket.readable.push (_stream_readable.js:128:10) w20150925-14:22:34.695(-4)? (stderr)     @ tcp.onread (net.js:529:21) 

here rabbit config:

{     connection: {       user: meteor.settings.rabbitmq.username,       pass: meteor.settings.rabbitmq.password,       server: meteor.settings.rabbitmq.server,       //port: 5672,       //timeout: 2000       vhost: meteor.settings.rabbitmq.vhost     },     exchanges:[       { name: messages.exchanges.dead, type: 'direct' },       { name: messages.exchanges.tmdb, type: 'direct' },       { name: messages.exchanges.graph, type: 'direct' }     ],     queues:[       { name: messages.queues.tmdb.read, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.tmdb.dead, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.graph.read, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.graph.write, subscribe: false, durable: true, deadletter: messages.exchanges.dead }     ],     bindings:[{       exchange: messages.exchanges.tmdb,       target: messages.queues.tmdb.read,       keys: [         messages.keys.tmdb.read.imdb,         messages.keys.tmdb.read.movies,         messages.keys.tmdb.read.tv,         messages.keys.tmdb.read.credits,         messages.keys.tmdb.read.people       ]     },{       exchange: messages.exchanges.dead,       target: messages.queues.dead,       keys: [         messages.keys.tmdb.dead,         messages.keys.graph.dead       ]     },{       exchange: messages.exchanges.graph,       target: messages.queues.graph.read,       keys: [         messages.keys.graph.read.any,         messages.keys.graph.read.movies,         messages.keys.graph.read.tv,         messages.keys.graph.read.people,         messages.keys.graph.read.places       ]     },{       exchange: messages.exchanges.graph,       target: messages.queues.graph.write,       keys: [         messages.keys.graph.write.any,         messages.keys.graph.write.movies,         messages.keys.graph.write.tv,         messages.keys.graph.write.people,         messages.keys.graph.write.places,         messages.keys.graph.write.relationships       ]     }     ]   } 

i checked in rabbitmq admin panel , i've explicitly set binding between dead letters exchange , queue, i'm not sure it's talking or how resolve it.

eureka! after digging through code , digging rabbitmq dashboard, found problem.

  exchanges:[       { name: messages.exchanges.dead, type: 'direct' },       { name: messages.exchanges.tmdb, type: 'direct' },       { name: messages.exchanges.graph, type: 'direct' }     ],     queues:[       { name: messages.queues.tmdb.read, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.tmdb.dead, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.graph.read, subscribe: false, durable: true, deadletter: messages.exchanges.dead },       { name: messages.queues.graph.write, subscribe: false, durable: true, deadletter: messages.exchanges.dead }     ] 

i defining messages.exchanges.dead exchange, , setting deadletter exchange various queues. problem dead-letters.q1 queue not being defined in queues:[] array.

this meant while dead-letters-ex.1 exchange existed , have messages routed it, there no dead-letters-q.1 created or available route messages to.

exchangebind; 404 (not-found) message "not_found - no exchange 'dead.letters-q.1' 

the exchangebind error got me looking @ bindings of queues exchanges led me down rabbit hole solution (pun intended).

now config looks this:

exchanges:[   { name: messages.exchanges.dead, type: 'direct' },   { name: messages.exchanges.tmdb, type: 'direct' },   { name: messages.exchanges.graph, type: 'direct' } ], queues:[   { name: messages.queues.dead, subscribe: false, durable: false },   { name: messages.queues.tmdb.read, subscribe: false, durable: false, deadletter: messages.exchanges.dead },   { name: messages.queues.tmdb.dead, subscribe: false, durable: false, deadletter: messages.exchanges.dead },   { name: messages.queues.graph.read, subscribe: false, durable: false, deadletter: messages.exchanges.dead },   { name: messages.queues.graph.write, subscribe: false, durable: false, deadletter: messages.exchanges.dead } ] 

and can continue building , debugging other parts of application.


Comments