Распространенные ошибки в RabbitMQ - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть два приложения S-APP1 и S-APP2 , и я только начал использовать rabbitMQ с клиентским гемом Bunny, поэтому, когда я нажимаю (это может быть больше щелчков в минуту) кнопку из S-APP1 , тогда я позвоню publisher.rb , который опубликует сообщение в очереди и прочитает из S-APP2 - потребителя.rb и положить его в sidekiq для обработки.

Сегодня я только что увидел эту ссылку https://www.cloudamqp.com/blog/2018-01-19-part4-rabbitmq-13-common-errors.html и прочитал ее, немного запутавшись в этих строках из этой ссылки "повторное использование соединений" и "Не используйте слишком много соединений или каналов", я делаюправильно эта вещь?Я использую heroku для запуска этого и использую аддон CloudAMQP.

publisher.rb (S-APP1)

def publish
    connection = Bunny.new( :host => ENV["AMQP_HOST"],
                            :vhost => ENV["AMQP_VHOST"],
                            :user => ENV["AMQP_USER"],
                            :password => ENV["AMQP_PASSWORD"])
    connection.start # start a communication session with the amqp server

    channel = connection.channel()

    channel.queue('order-queue', durable: true)

    exchange = channel.default_exchange

    message = { order_id: '1542' }

    # publish a message to the queue
    exchange.publish(message.to_json, routing_key: 'order-queue')

    puts " [x] Sent #{message}"
    connection.close()
end

Это моя потребительская часть

consumer.rb (S-APP2)

connection = Bunny.new( :host => ENV["AMQP_HOST"],
                        :vhost => ENV["AMQP_VHOST"],
                        :user => ENV["AMQP_USER"],
                        :password => ENV["AMQP_PASSWORD"])

connection.start # start a communication session with the amqp server

channel = connection.channel()

queue = channel.queue('order-queue', durable: true)

puts ' [*] Waiting for messages. To exit press CTRL+C'

queue.subscribe(manual_ack: true, block: true) do |delivery_info, properties, payload|
  puts " [x] Received #{payload}"
  puts " [x] Done"

  channel.ack(delivery_info.delivery_tag, false)
  # Call worker to do refresh
  callSidekiqWorker.perform_async(payload)
end
...