Добрый день!
Пользую библиотечку
amqp для ноды. Так как вменяемого гайда для этой штуки нет, учился по PHP / Python версиям. Столкнулся с кардинальным непониманием инициализации очереди и решил написать над этим всем обертку:
# Reqyures
events = require 'events'
amqp = require 'amqp'
# Init
EventEmitter = events.EventEmitter
QUEUE_NAME = "test_q"
EXCHANGE_NAME = "test_e"
class AmqpConnection extends EventEmitter
constructor: ->
@connection = amqp.createConnection {
host: 'localhost'
port: 5672
login: 'test'
password: '123456'
vhost: '/'
}
# @queue = undefined
@connection.on 'ready', =>
@connection.exchange EXCHANGE_NAME,
type: 'topic'
autoDelete: false
durable: true
confirm: true
deliveryMode: 2
, (@exchange)=>
@connection.queue QUEUE_NAME,
type: 'topic'
autoDelete: false
durable: true
confirm: true
deliveryMode: 2
, (@queue)=>
@queue.bind @exchange, QUEUE_NAME, =>
@.emit 'ready', {
@connection
@exchange
@queue
}
@connection.on 'error', (err)=>
@.emit 'error', err
sendMessage: (message, callback)->
@exchange.publish QUEUE_NAME, message, {
mandatory: true
deliveryMode: 2
}, (err)=>
callback err, !err
subscribe: (count, callback)->
@queue.subscribe {
ack: true
prefetchCount: count
}, callback
ac = new AmqpConnection()
module.exports = ac
Собственно проблема в том, что я не совсем понимаю, зачем я каждый раз в exchange и queue, а также publish передаю одни и те же опции. Потестировав, кажется если передавать с различными опциями, то все ломается.
Как это все обернуть более пряморуко?