stefanchrobot

stefanchrobot

Handling errors in RabbitMQ consumer

I’m trying to set up a RabbitMQ consumer using the amqp library. I want to process multiple messages concurrently and properly handle errors (properly reject message if a processing error occurs). How would I go about doing this?

The “Setup a consumer GenServer” example defines a single GenServer that spawns a new process for each incoming message which paired with prefetch_count > 1 allows for concurrent processing of the messages.

How do I make sure that those processes are cleaned up properly? Is spawn_link enough to shut them down when the parent GenServer is shutting down?
Should those processes live under a supervision tree?
How would I implement a timeout for processing of a message (kill it after 5seconds)?
The example says “You might also want to catch :exit signal in production code.” Why? When would that happen? How do I do that?
Are these consumer processes a use case for Tasks or DynamicSupervisor?
Or should this be set up totally differently, i.e. have a Supervisor with N workers where each one is a consumer on a shared connection?

Most Liked

blatyo

blatyo

Conduit Core Team

You might find my library useful for this. It handles all the process and error stuff for you.

https://github.com/conduitframework/conduit

These slides give you idea of the code you would write.

Even if you don’t use it, you can see how those types of things are handled here.

https://github.com/conduitframework/conduit_amqp

EDIT: If you do use it and discover something that’s not well documented. Please file a ticket or a PR for it.

Where Next?

Popular in Questions Top

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
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
earth10
Hi, I’m just starting to build a side-project with Elixir and Phoenix and doing some basic test with Elixir alone. What strikes me is th...
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
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
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
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
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
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New

Other popular topics Top

sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 42920 311
New
greenz1
I have a phoenix application from which a user can download multiple(5-6) files of size 1MB. I couldn’t find anything related to sending ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
johnnyicon
Hi all, I’ve just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I’m trying to use Postgres...
New
chrismccord
Phoenix 1.4.0 released Phoenix 1.4 is out! This release ships with exciting new features, most notably with HTTP2 support, improved deve...
688 30877 112
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
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New

We're in Beta

About us Mission Statement