Как подключиться к удаленному / внешнему каналу приложения Phoenix из другого приложения Phoenix?

Я пытаюсь постепенно перенести устаревшее приложение API на Phoenix. В идеале я бы выделил субдомены моего приложения в отдельные приложения Phoenix и разместил их на разных узлах сервера.

Я надеюсь использовать каналы Phoenix для облегчения связи между приложениями. Как подключить одно приложение Phoenix к каналам и темам другого? Например, я хотел бы настроить поддомен 'jobs.foo.com' с помощью WebSockets, например:

socket "/ws", Jobs do
   channel "jobs:work_orders", WorkOrdersChannel
end

Из другого приложения Phoenix (например: Reports) я хотел бы опубликовать / подписаться на эту тему на канале Jobs. Было бы целесообразно создать Phoenix.Endpoint Вакансии lib, в отчетах, и настроить это Jobs.Endpoint URL в config.exs? Могу ли я использовать что-то вроде Phoenix.PubSub.subscribe/4 с этой конечной точкой pubsub?

Я не уверен, имеет ли смысл то, о чем я думаю. Если есть более рекомендуемый подход, я открыт для предложений.

-- РЕДАКТИРОВАТЬ --

Просто чтобы уточнить, чего я пытаюсь добиться... Я хочу, чтобы одно приложение Phoenix подключалось к другому через клиент WebSocket. Это позволит мне иметь приложения с другой доменной логикой, общаться через события по каналам и темам, представляющим общий интерес.

2 ответа

Решение

Хорошо, я нашел способ создания клиентов WebSocket в моих различных приложениях Phoenix и позволить приложению взаимодействовать с приложениями по удаленным каналам и темам. Я взял мои реплики от:

channel_test.exs

а также

websocket_client.exs

Я в основном скопировал websocket_client.exs код в моем приложении ../lib каталог, затем загружен и псевдоним его. После этого я мог подключить одно приложение к удаленному сокету другого приложения, так же, как это делается в channel_test.exs, Я развернул два отдельных приложения Phoenix на двух разных машинах и смог отправлять и получать сообщения по каналам.

Не забудьте добавить {:websocket_client, github: "jeremyong/websocket_client"} на ваш mix.exs зависимостей.

Я думаю, что вы, возможно, захотите заглянуть в Phoenix.PubSub - если вам удастся соединить ваши узлы в кластер (или даже без этого, используя базу данных или сервер Redis), вы сможете заставить их общаться друг с другом через это.,

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