В этой статье мы научимся отправлять и получать сигналы. Сигнал представляет собой сообщение, которое отправляется фронтенд-приложением, сервисом платформы или пользовательской serverless-функцией для того, чтобы оповестить остальные компоненты системы о наступлении некого потенциально интересного им события. На сигнал может быть подписано произвольное количество получателей; различные сигналы могут иметь различные списки подписчиков. Такой способ обмена данными называется “издатель-подписчик” (publisher-subscriber). Виду сигнала в платформе extremum соответствует сущность exchange (точка обмена сигналами), а подписке на сигнал - сущность subscription.
Если вы проходили другие руководства из этого раздела, вы, вероятно, уже выполнили перечисленные ниже шаги. В этом случае достаточно выполнить только аутентификацию в платформе, так как имеющийся у вас токен мог устареть
Установите необходимое вспомогательное ПО
Установите интерфейс командной строки extremum CLI
Создайте новое приложение. Назовите его pusk.fm
Вы можете выбрать другое имя для вашего приложения. В этом случае, при выполнении дальнейших упражнений этого руководства вам следует заменять pusk.fm на выбранное вами имя
Выполните аутентификацию в платформе extremum
Создадим точку обмена сигналами при помощи API платформы. Для этого вам понадобится токен доступа, полученный при входе в систему. Его можно найти в вашем каталоге пользователя в файле с именем .extremum. Содержимое этого файла должно выглядеть примерно так:
{
"appid": "0",
"url": "https://auth.app-0.ajev84ud35k4m2lo4n39.y.extremum.io",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6I..."
}
Токен доступа содержится в поле token (в примере выше значение обрезано для краткости)
Выполним в терминале следующую команду
curl -X POST https://api.app-0.<ваш-домен>/v3/exchanges \
-H 'Authorization: Bearer <токен-доступа>' \
-H 'X-App-Id: 0' \
-H 'Content-Type: application/json' \
-d '{ "name": "testexch" }'
Вы получите ответ следующего вида (идентификаторы и метки времени могут отличаться; для удобства ответ был отформатирован в Visual Studio Code)
{
"status": "ok",
"code": 200,
"timestamp": "2023-03-16T10:35:51.308000Z",
"rqid": "dc640abfe382d185008236f28c46953b",
"locale": "en",
"result": {
"@created": "2023-03-16T10:35:51.021000Z",
"@createdBy": "admin",
"@id": "https://api.app-0.ajev84ud35k4m2lo4n39.y.extremum.io/v3/8bd04708-abfb-4036-8da2-44e146f03078",
"@modified": "2023-03-16T10:35:51.021000Z",
"@modifiedBy": "admin",
"@type": "Exchange",
"@uuid": "8bd04708-abfb-4036-8da2-44e146f03078",
"@version": 0,
"subscriptions": {
"count": 0,
"top": [],
"@uuid": "4ba7b26f-25e1-4d84-9078-0be849d1d47d",
"@id": "https://api.app-0.ajev84ud35k4m2lo4n39.y.extremum.io/v3/4ba7b26f-25e1-4d84-9078-0be849d1d47d"
},
"streams": {
"count": 0,
"top": [],
"@uuid": "484131b8-ece4-426d-9a84-9ea2411b2ba2",
"@id": "https://api.app-0.ajev84ud35k4m2lo4n39.y.extremum.io/v3/484131b8-ece4-426d-9a84-9ea2411b2ba2"
},
"name": "testexch"
}
}
Скопируем значение поля result.@uuid, оно потребуется нам для дальнейшей работы
Обратите внимание, нам нужно значение именно поля @uuid, расположенного непосредственно в объекте result
Выполним следующую команду
$ pusk.fm signals subscribe <exchange-uuid>
Выводом команды будет идентификатор подписки:
"8c39fc01-87b4-49df-9e9c-e70194425e41"
Для отправки сигнала необходимо указать точку обмена сигналами и параметры самого сигнала, в том числе его полезную нагрузку:
$ pusk.fm signals send <exchange-uuid> --data "test"
Мы подписаны на наш сигнал, поэтому можем получить его. Так как мы не указали функции-обработчика, для получения сигналов мы должны сами обратиться к соответствующему методу API. Сделаем это с помощью CLI:
pusk.fm signals poll <subscription-uuid>
Пример ответа платформы:
[
{
"handle": "EAEgnsSC0e4wKAE",
"signal": {
"kind": "regular",
"topic": "",
"source": "",
"xid": "248cd690-a02b-46c2-a4a3-c920cf574ec0",
"sent": {
"timestamp": "0001-01-01T00:00:00Z",
"frame": {}
},
"data": "test",
"peer": {
"uuid": ""
},
"@id": "",
"@type": "",
"@created": "0001-01-01T00:00:00Z",
"@updated": "0001-01-01T00:00:00Z"
}
}
]
Выполним команду
$ pusk.fm signals unsubscribe <subscription-uuid>
Если мы теперь попробуем получить сигналы из нашей подписки, то получим ошибку
Веб-приложение может подписаться на сигнал при помощи веб-сокета
Для выполнения данного упражнения нам потребуется утилита Postman. Ее можно скачать с официального сайта
Заново создадим подписку:
$ pusk.fm signals subscribe <exchange-uuid>
Создадим в Postman подключение к веб-сокету со следующим URL:
ws://api.<ваш-домен>/v3/signals/exchanges/<exchange-uuid>/sub?app_id=0&access_token=<токен-доступа>
Нажмем на кнопку Connect
Отправим сигнал:
$ pusk.fm signals send <exchange-uuid> --data "test ws"
Он должен появиться в журнале Postman:
Удалим подписку
$ pusk.fm signals unsubscribe <subscription-id>
Удалим точку обмена
curl -X DELETE https://api.app-0.<ваш-домен>/v3/<exchange-uuid> \
-H 'Authorization: Bearer <токен-доступа>' \
-H 'X-App-Id: 0'