ouven

ouven

Hi all,

I am using commanded in a project for 3 years now. So first of all: Thanks to the commanded team!

Context:
I have an aggregate that represents something similar like a company unit, that I have to close down.
The company unit has other aggregates linked to it. In this particular case it is hardware, that needs to be unregistered und users, that need to be removed from this company unit (revoking their permissions).

Problem:
When I was implementing such cases in the past, I used simple event handlers. In this new story I wanted to have a closer look at process managers.

What I did not get is, how to start a process, so what is the first event to listen to and to start the process manager instance from?

Is it the CompanyUnitClosed event, that was emitted by the CompanyUnit aggregate after sending a CloseCompanyUnit command to it?

Or is it more like a CompanyUnitCloseProecssStarted event that I would need to directly add to the event stream?

How was it supposed to be used?
I hope someone can help me with this two approaches or even present a new one!

Cheers
Ruben

Showing Posts 1 to 1

jerdew

jerdew

The most useful of answers: It depends.

The aggregates that are attached to the Company, if they receive commands from sources other than the Company aggregate then you could have a race condition where you told the Company to close, and the Process manager turns to another aggregate to shut it down, but cannot or should not because it’s in the middle of its own workflow – if that workflow ever tried to call a command back on the closed Company, you might have some problems, especially if the event was billable or otherwise very important.

Non exhaustive list of options:

  • You just close up children aggregates even if they’re in the middle of something because.. it’s fine in your case
  • The PM could handle these errors (upon calling child aggregate it gets back an unexpected response, perhaps it could reopen the company, or something.) In the meantime the company is closed and acts/is projected that way, but attached aggregates may be busy dealing with their own commands/events.
  • You set the company in a ‘closing’ state (like you suggested with CompanyUnitCloseProecssStarted) where the PM would finalize the shutdown, send a ‘complete’ command to the Company and then itself shutdown on a CompanyUnitCloseProcessCompleted -type event. This helps minimize the possible events/commands that children aggregates might be orchestrating before the Company is marked as ‘closed’.

The asyncness of the event sourced process can require complex solutions, and you can refactor the commands/events/processes in several ways each with their own failure modes. The main question is what guarantees do you need? That should drive your implementation.

— All posts loaded —

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New
leoschweizer
Hi, we run different LLM models across a cluster, with each node loading a configurable subset. Model-specific queues let nodes consume ...
New

Other Trending Topics Top

KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New
ausimian
Emily is an Elixir library that runs Nx computations on Apple’s MLX. Install it as the default Nx backend and Nx, defn, Axon, Nx.Serving,...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews