December 21, 2023

Работа с RabbitMQ в приложениях Ruby on Rails

RabbitMQ - это мощный брокер сообщений, который позволяет эффективно организовывать обмен данными между компонентами приложения.

Установка RabbitMQ

Первым шагом будет установка RabbitMQ. Для упрощения этого процесса вы можете воспользоваться менеджером пакетов. Например, с использованием Homebrew на macOS:

brew install rabbitmq

После установки запустите сервер RabbitMQ:

rabbitmq-server

Добавление библиотеки Bunny

Для взаимодействия с RabbitMQ из приложения Rails, мы будем использовать библиотеку Bunny. Добавьте ее в ваш файл Gemfile:

gem 'bunny'

После этого выполните команду bundle install для установки библиотеки.

Создание соединения с RabbitMQ

Теперь добавим код для создания соединения с RabbitMQ. Обычно это делается в файле config/initializers/rabbitmq.rb:

# config/initializers/rabbitmq.rb

require 'bunny'

RABBITMQ_CONNECTION = Bunny.new
RABBITMQ_CONNECTION.start

Отправка сообщений

Для отправки сообщений создайте класс, отвечающий за отправку:

# app/services/message_publisher.rb

class MessagePublisher
  def self.publish(message, queue_name)
    channel = RABBITMQ_CONNECTION.create_channel
    queue = channel.queue(queue_name)

    queue.publish(message, persistent: true)

    channel.close
  end
end

Вы можете использовать этот класс для отправки сообщений в определенные очереди. Например:

MessagePublisher.publish('Hello, RabbitMQ!', 'my_queue')

Подписка на сообщения

Для обработки сообщений создайте класс, отвечающий за подписку:

# app/services/message_subscriber.rb

class MessageSubscriber
  def self.subscribe(queue_name)
    channel = RABBITMQ_CONNECTION.create_channel
    queue = channel.queue(queue_name)

    queue.subscribe(block: true) do |delivery_info, properties, body|
      puts "Received message: #{body}"
    end
  end
end

Используйте этот класс для подписки на определенные очереди:

MessageSubscriber.subscribe('my_queue')