PhoenixMicro.Middleware behaviour (PhoenixMicro v1.0.0)

Copy Markdown View Source

Behaviour for pluggable message-processing middleware.

Middleware modules intercept messages as they flow into consumer handlers, allowing cross-cutting concerns (logging, metrics, tracing, auth) to be composed without modifying handler logic.

Interface

defmodule MyApp.AuthMiddleware do
  @behaviour PhoenixMicro.Middleware

  @impl PhoenixMicro.Middleware
  def call(%PhoenixMicro.Message{} = message, next) do
    if authorized?(message.headers) do
      next.(message)
    else
      {:error, :unauthorized}
    end
  end
end

Composing middleware

Middleware is specified on a consumer using the middleware/1 macro:

defmodule MyConsumer do
  use PhoenixMicro.Consumer

  topic "payments.*"
  middleware [MyApp.AuthMiddleware, PhoenixMicro.Middleware.Logger]
end

Middleware is executed left to right (outermost first).

Summary

Types

next()

@type next() :: (PhoenixMicro.Message.t() -> :ok | {:error, term()})

Callbacks

call(t, next)

@callback call(PhoenixMicro.Message.t(), next()) :: :ok | {:error, term()}