mesuutt

mesuutt

Some questions about working with multiple connected processes, linking and app structure

Imagine such a scenario:

There are 2 companies(dealer and supplier), each one using their own websites.
I want to create a service between them.

My service will periodically fetch new product request from the dealer’s API and send the product request to the supplier’s API. Also, the service will periodically check sent product requests from supplier’s API and if there is a change about the sent products on the supplier’s website the service will send related changes to dealer’s API.

I don’t know exactly what is the best way of handling this type of scenario.

What do you think about building a structure like this:

Start 2 GenServers for each dealer<=>supplier binary when application started.

I think creating two separate genserver will provide me separation of dealer/supplier related code from each other.

DealerClient:

- Fetch new products from dealer API(periodically)
- Send product changes sent by supplier genserver to dealer API.

SupplierClient:

- Fetch product changes from supplier API(periodically).
- Send the changes to dealer genserver.

So data flow will be like this:

DealerAPI <-> DealerClient <-> SupplierClient <-> SupplierAPI

Also there are multiple dealers and multiple suppliers(OneToOne relation), so each dealer process should know
her supplier’s process to send or fetch data from.

Questions:

  • This structure is good? If not what would you do if you were me? What kind of structure would you build?
  • How to handle dynamic process linking? How does dealer process know her supplier’s process?
  • Should I create a supervisor for each dealer<=>supplier binary?

Sorry about my poor English.

Most Liked

kokolegorille

kokolegorille

Hello, welcome to the forum.

That is a nice project, let me have my 2 cents opinion…

GenServer are not object, the closest You might find in Elixir is a struct. A struct is like an object without method, what You would call methods, are Module functions…

You can learn about good usage of GenServer here https://www.theerlangelist.com/article/spawn_or_not.

What about a GenServer called LinkService, where You would pass dealer and supplier as params Structs?

You have probably many ways to do it, but I don’t think You should model your business directly with GenServer :slight_smile:

lud

lud

Welcome there :slight_smile:

I think you misuses GenServer for objects (as in OO). Kind of what @kokolegorille said.

I think it would be easier to desing and to test with Task, or other short lived processes.

My service will periodically fetch new product request from the dealer’s API and send the product request to the supplier’s API

When you say “periodically” and then Should come 10 product per second sometimes … How is a fetch triggered ? Is it from external input or do you have a process that triggers the fetch every X seconds ?

I think I would just write the code that does 1) fetch a new product request and 2) send it to the supplier. When it works, then
I would just wrap that in a Task.
If your fetch returns multiple products, I would spawn a Task for each one or use Task.async_stream to limit concurrency and to be gentle with the external endpoint.

What about a GenServer called LinkService, where You would pass dealer and supplier as params Structs?

This GenServer could be the one that does the fetch every N seconds or listens for external inputs ; and spawn tasks.

Where Next?

Popular in Questions Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
sacepums
Hey guys. I'm new to elixir and im really stocked about it. But I ran into a bit of problem - I need to convert a date sting, for examp...
New
chensan
I have a User schema with a :from_id field set to type :string: defmodule TweetBot.Repo.Migrations.CreateUsers do use Ecto.Migration ...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
chrisalley
ExUnit now has describe blocks which is a welcome addition coming from RSpec. In the docs, it states that nested hierarchies of describe ...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New

Other popular topics Top

sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 27727 240
New
minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
msaraiva
Surface is an experimental library built on top of Phoenix LiveView and its new LiveComponent API that aims to provide a more declarative...
564 42633 214
New
electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

We're in Beta

About us Mission Statement