Задать вопрос

Почему не работает консьюмер?

доброго времени суток! у меня в приложении есть консьюмер сообщений rabbitmq. после запуска приложения на сервере он отрабатывает только 1 раз и затем перестает возвращать канал с данными. в чем может быть проблема? скорее всего что-то связано с каналами, но не могу понять что именно, не так много опыта на go. заранее спасибо! метод консьюмера прилагаю ниже

func (c *Consumer) Consume(ctx context.Context) (<-chan types.ReceiptMessage, error) {
	receiptChan := make(chan types.ReceiptMessage)

	channel, err := c.rabbitmqConsumer.ListenQueue(ctx)
	if err != nil {
		logger.AppLogger().Errorw("Consume() -> c.consumer.ListenQueue(ctx)", "error", err.Error())

		return nil, err
	}

	go func() {
		for {
			select {
			case <-ctx.Done():
				close(receiptChan)
				return
			case msg, open := <-channel:
				if !open {
					close(receiptChan)
					return
				}

				var receiptMessage types.ReceiptMessage

				err = json.Unmarshal(msg.Body, &receiptMessage)
				if err != nil {
					logger.AppLogger().Errorw(
						"Consume() -> json.Unmarshal(msg.Body, &receiptMessage)",
						"error", err.Error(),
					)

					continue
				}

				receiptChan <- receiptMessage
			}
		}
	}()

	return receiptChan, nil
}
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

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

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