Как заставить механизм автообнаружения платформы API для концентратора Mercure работать с образом Docker?

Я разработал демонстрационный проект, чтобы проиллюстрировать свою презентацию о протоколе Mercure, в которой я также использую платформу API. Я использовал механизм автообнаружения для получения URL-адреса концентратора Mercure (платформа API отправляетLinkзаголовок, чтобы переднее приложение могло получить URL-адрес хаба, не зная его заранее). Но мне пришлось провести рефакторинг (в проекте использовались образы докеров и репозиторий композитора от компании, в которой я работаю, где я впервые представил Mercure), и в какой-то момент (я не могу вспомнить, когда именно) механизм автообнаружения не работал больше.

Я выяснил, почему это не сработало, и это связано с тем, что платформа API отправляет URL-адрес концентратора Mercure, указанный в .env файл, который не http://localhost:3000/.well-known/mercure (URL-адрес хаба, на который я подписан), но http://mercure/.well-known/mercure, где первая mercure- это имя моего док-контейнера Mercure. И мое переднее приложение пыталось подписаться на этот URL, которого не существует. Чтобы временно решить проблему, я просто жестко запрограммировал URL-адрес хаба в своем переднем приложении, но мне действительно хотелось бы знать, есть ли решение использовать механизм автообнаружения с изображением докера Mercure.

Ошибка, которую я получаю, когда MERCURE_PUBLISH_URL в .env знак равно http://localhost:3000/.well-known/mercure:
Couldn't connect to server for "http://localhost:3000/.well-known/mercure".

Мой .env рабочая конфигурация:
MERCURE_PUBLISH_URL=http://mercure/.well-known/mercure
NB: я пробовал установить MERCURE_SUBSCRIBE_URL=http://localhost:3000/.well-known/mercure но это ничего не изменило

Фрагмент моего переднего приложения, в котором я подписываюсь на хаб:
закомментированный код - это то, как автоматически обнаруживать URL хаба путем анализа заголовка ссылки, что я могу сделать прямо сейчас по причинам, описанным выше.

// const hubUrl = response.headers.link.match(/<([^>]+)>;\s+rel=(?:mercure|"[^"]*mercure[^"]*")/)[1];

const es = new EventSource(`http://localhost:3000/.well-known/mercure?topic=${document.location.origin}/api/pizzas/{id}`);
es.onmessage = ({data}) => {
    // doing something here
}

Моя конфигурация Mercure для создания докеров:

    mercure:
        image: dunglas/mercure
        container_name: mercure
        environment:
            ALLOW_ANONYMOUS: 1
            JWT_KEY: aVerySecretKey
            PUBLISH_ALLOWED_ORIGINS: '*'
            CORS_ALLOWED_ORIGINS: http://localhost
        ports:
            - 3000:80

0 ответов

Другие вопросы по тегам