grabbitLayer

это маленькая обвязка поверх rabbitMQ написанная на го по сути предоставляет http интерфейс для реализации RPC т.е. вы посылаете запрос в грабит, от туда он попадает в очередь, с очереди возвращается в грабит, и тот делает запрос. результать помещается в обратную очередь, и по возвращению в грабит делается запрос на адрес возврата

схема

Подробнее о том как работает RPC можно почитать тут

развертывание

  • установите golang >= 1.15
  • затяние репозиторий
git clone https://github.com/Skrip42/grabbitLayer.git
  • соберите проект
go build cmd/grabbitlayer/main.go
  • откопируйте и отредактируйте config/config.yaml.example в config/config.yaml
  • откопируйте и отредактируйте grabbitlayer grabbitlayer.service.example в /etc/systemd/system/grabbitlayer.service
  • включите сервис и настройте автозапуск:
sudo systemctl daemon-reload
sudo systemctl enable grabbitlayer
sudo systemctl start grabbitlayer

использование

в виде курл запроса:

    curl --location --request POST 'grabbitlayer.host:80?queue=queue_name&callback=callback.url' \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "url":"http://ponhub.mycentra.ru/api/aggregation_switch?api_key=ponBaseReadApiKey&cluster.id=5",
        "method":"GET",
        "headers":"Connection: keep-alive\nAccept: *\/*\nUser-Agent: Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/88.0.4324.182 Safari\/537.36\nX-Requested-With: XMLHttpRequest\nAccept-Encoding: gzip, deflate\nAccept-Language: ru,ru-RU;q=0.9\nCookie: PHPSESSID=l2dophn4a1m2g4ash00pgrs8p6",
        "body":""
    }'

как можно увидеть параметры целевого запроса просто передаются в теле как json вида

{
    "url":"target.url",
    "method":"TARGET_METHOD",
    "headers":"Target:Headers",
    "body":"target body"
}

сам же запрос имеет 2 параметра

  • queue - префикс имени очередей через которые будет гулять запрос
  • callback - куда будет направлен ответ

для php/symfony рекомендую готовый сервис