@SSSSTTTTAAAASSSS

RabbitMQ: вопрос по consumer-у?

Не могу никак разобраться с RabbitMQ с consumer-ом.
Запускаю свои контейнеры через docker-compose все вроде как работает, очереди создаются, consumer тоже рапортует что подключился, но очереди не получает. Если в ручную перезапускаю consumer-а - подхватывает все очереди, которые были и новые начинает подхватывать сразу же.
Насколько я понял, пока не будет хотя бы одного сообщения в очереди, consumer их не видит и не получает.
И вот не пойму, это мне надо как-то логику сервисов пересматривать, или docker-compose файл?

Вот docker-compose файл:
version: "3.1"

services:
  http:
    container_name: "http_pr"
    build:
      context: "./"
      dockerfile: "./docker/http.Dockerfile"
    ports:
      - "8085:8085"
#    links:
#      - "grpc:grpc"
    environment:
      PORT_HTTP: ":8085"
      GRPC: "grpc:9000"
      RMQ_PATH: "rabbitmq-broker:5672/"
      RMQ_LOG: "guest"
      RMQ_PASS: "guest"
    depends_on:
      - rabbitmq-broker

  grpc:
    container_name: "grpc"
    build:
      context: "./"
      dockerfile: "./docker/grpc.Dockerfile"
    ports:
      - "9000:9000"
    environment:
      TCP_PORT: ":9000"
      DB_TYPE: "inmemory"

  rabbitmq-broker:
    image: rabbitmq:management-alpine
    container_name: "rabbitmq-broker"
    hostname: rabbitmq-broker
    ports:
      - 5672:5672 # for sender and consumer connections
      - 15672:15672
    volumes:
      - ./rabbitmq/data/:/var/lib/rabbitmq
      - ./rabbitmq/log/:/var/log/rabbitmq
    restart: unless-stopped
    environment:
      RABBITMQ_DEFAULT_PASS: "guest"
      RABBITMQ_DEFAULT_USER: "guest"
#      RABBITMQ_DEFAULT_VHOST: "/"

  consumer:
    build:
      context: "./"
      dockerfile: "./docker/consumer.Dockerfile"
    depends_on:
      - rabbitmq-broker
      - http
    environment:
      RMQ_PATH: "rabbitmq-broker:5672/"
      RMQ_LOG: "guest"
      RMQ_PASS: "guest"
    restart: on-failure
  • Вопрос задан
  • 260 просмотров
Пригласить эксперта
Ответы на вопрос 1
@yarkin
Куда происходит публикация сообщения, в обменник? Кто создаёт очередь и биндинг на обменник? Может ли такое случиться, что если очередь и биндинг создаёт консьюмер, то в момент их создания обменника ещё не существует и происходит ошибка, которая игнорируется? Раз есть management плагин в контейнере, можно посмотреть состояние системы в момент, когда сообщения не получаются консьюмером: есть ли очередь, обменник, бингдинг между ними, консьюмер очереди.
Но тоже не забывайте, что если в первую очередь стартует паблишер, а потом консьюмер, то при отсутсвующих очередях можно потерять сообщения. В идеале создавать всю инфраструктуру обменников и очередей должен какой-то скрипт инициализации, до старта основных приложений (что-то схожее с запускам миграции БД). Но такое так же можно сделать с помощью самого RabbitMQ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы