Работа с 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')