D3vd

D3vd

Hey!

I have two phoenix applications and would like to transfer data between them. What is the most efficient way to do this?

The first approach I thought about was to make http requests to each app via the already existing rest apis. I usually try not to make rest api calls to communicate within my micro services, as I feel they add an extra overhead in this case. But I am open to use it if there isn’t a better way.

I my search I came across this post
Efficient way to establishing communication between Phoenix applictions

One of the comments mentioned that Distributed Erlang could be used to communicate between two nodes. This was pretty exciting as I thought I could call a function in App1 from App2, kinda like rpc which was exactly what I was looking for.

So I connected both the apps in the same cluster and ran them in iex. I tried calling a function in App Foo from the iex in App Bar but I got Foo.Context is not available.

defmodule Foo.Context do
  def func(), do: "Hello"
end

Is it possible to just call a function from another phoenix app like

defmodule Bar.Context do
  def func(),  do: Foo.Context.func()
end

I was only able to find examples where functions from a different node were called from iex but nothing from the code. Is this even possible?

I am pretty new to elixir and phoenix, so please correct me if I got something wrong.

Showing Posts 1 to 4

mpope

mpope

So you can call some code on a remote node using the RPC module’s call/4 function, but I think a better method is to use a GenServer process that is registered on both nodes. Then you’ll have a well defined handler to use on either node when you want to transfer data. The function GenServer.call/3 function’s first argument is a server() type. Most examples send pass a pid or name as the first argument, like:

{:ok, _} = GenServer.start_link(Stack, [:hello], name: MyServer)
GenServer.call(MyServer, :message)

However, instead of MyServer, you can pass a tuple of {atom(), node()}. So you can change the call to

GenServer.call({MyServer, :node2}, :message)

replacing :node2 with the name of the other node.

D3vd

D3vd OP

I like this GenServer process approach. I haven’t used GenServer before, but I will give it shot.

Thanks a lot!

vfsoraki

vfsoraki

What @mpope wrote will be the answer.

I just want to mention Erlang global module which can be used to register a name globally in a cluster.

As a note, if you want to register an OTP behavior using :global, pass {:via, :global, SomeName} as name to start_link function

mpope

mpope

global works, but I think I’d reach for pg for their brief problem statement.

— All posts loaded —

Where Next? Top

Trending in Questions Top

stjefim
Hello! Suppose you are building workflow (order / task / payment) processing system with the following requirements: Each workflow con...
New
Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
jaybe78
Hello, I’m developing a online persistent chat system (what’s app) like using elixir/dynamodb/aws for a mobile app(flutter). The diffic...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
widianto
I think I’ve found a small improvement I could contribute to <%= web_namespace %>.CoreComponents (installer/templates/phx_web/compo...
New

Other Trending Topics Top

garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New
aseigo
ICal is a library for interacting with iCalendar data. It parses iCalendars into typed Elixir structs via ICal.from_ics, and can prepare ...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews