greenz1
Help with Elixir app management
I am building an Elixir app for prod. It has a :observer.start layout as given below
My app’s flow is as follows.
Step 1: Workers under Elixir.AppName.MQTT.Supervisor receive some message.
Step 2: This message is sent to Elixir.AppName.Server
Step 3: Elixir.AppName.Server starts a worker dynamically under Elixir.AppName.on.Supervisor.
Step 4: The worker receives the message and acts accordingly
Let us call the worker, which is a GenServer, WORKER
My problem is that every time I have to perform some task in WORKERs I end up using send self(), message and having a corresponding handle_info in the WORKER.
I feel there is some issue with my current approach as I cannot utilize functions like GenServer.call or GenServer.cast
How should I remodel the application so that it makes use of other GenServer functions and callbacks?
Most Liked
kokolegorille
Maybe You can do like this?
# Maybe there is a typo in your module name :slight_smile:
defmodule AppName.on.Worker do
use GenServer
# THIS IS API
def start_link do
# receives the message as argument
GenServer.start_link/3
end
def some_task, do: GenServer.call ...
# THIS IS SERVER SIDE
def init/1 do
send self(), {:check_args, message_from_mqtt_as_map}
{:ok, state}
end
# Wherever You need it...
def handle_call(:some_task, _from, _state) do
perform_some_task()
end
def handle_info({:check_args, message_from_mqtt_as_map}, state) do
case message_from_mqtt_as_map["action"] do
:create ->
do_create(message_from_mqtt_as_map)
perform_some_task()
...
end
{:noreply, state}
end
# helper functions for the task
defp perform_some_task, do: ...
end
BTW Why do You need to do this
send self(), :some_task
instead of a simple function call?
Last Post!
greenz1
send self(), :some_task is used so that the same task can be initialized by some other process.
Yes, the module name was obfuscated thus the typo and AppName.on.Worker should be AppName.On.Worker ![]()
As the some_task() cannot be called from within, so, from which process should I call AppName.On.Worker.some_task?
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










