Как подключиться к удаленному / внешнему каналу приложения 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 и позволить приложению взаимодействовать с приложениями по удаленным каналам и темам. Я взял мои реплики от:
а также
Я в основном скопировал websocket_client.exs
код в моем приложении ../lib
каталог, затем загружен и псевдоним его. После этого я мог подключить одно приложение к удаленному сокету другого приложения, так же, как это делается в channel_test.exs
, Я развернул два отдельных приложения Phoenix на двух разных машинах и смог отправлять и получать сообщения по каналам.
Не забудьте добавить {:websocket_client, github: "jeremyong/websocket_client"}
на ваш mix.exs
зависимостей.
Я думаю, что вы, возможно, захотите заглянуть в Phoenix.PubSub - если вам удастся соединить ваши узлы в кластер (или даже без этого, используя базу данных или сервер Redis), вы сможете заставить их общаться друг с другом через это.,