# `BroadwayPgQue.Client`
[🔗](https://github.com/kuku/broadway_pgque/blob/v0.1.0/lib/broadway_pgque/client.ex#L1)

Lightweight Postgres client executing PgQue queue operations for Broadway.

Supports shared Ecto repositories, direct Postgrex connection PIDs, and dedicated connection pools.

# `consumer_name`

```elixir
@type consumer_name() :: String.t() | atom()
```

# `queue_name`

```elixir
@type queue_name() :: String.t() | atom()
```

# `repo_or_conn`

```elixir
@type repo_or_conn() :: module() | pid() | atom()
```

# `ack`

```elixir
@spec ack(repo_or_conn(), integer(), keyword()) :: {:ok, integer()} | {:error, term()}
```

Acknowledges and closes an active batch.

# `create_queue`

```elixir
@spec create_queue(repo_or_conn(), queue_name(), keyword()) ::
  {:ok, term()} | {:error, term()}
```

Ensures a PgQue queue exists and configures its ticker responsiveness.

# `event_dead`

```elixir
@spec event_dead(repo_or_conn(), integer(), integer(), String.t(), keyword()) ::
  {:ok, integer()} | {:error, term()}
```

Moves an event directly to the Dead-Letter Queue (DLQ).

# `event_retry`

```elixir
@spec event_retry(repo_or_conn(), integer(), integer(), integer(), keyword()) ::
  {:ok, integer()} | {:error, term()}
```

Marks an event for retry after a delay in seconds.

# `query`

```elixir
@spec query(repo_or_conn(), String.t(), [term()], keyword()) ::
  {:ok, Postgrex.Result.t()} | {:error, term()}
```

Executes an arbitrary SQL query against an Ecto repo or Postgrex connection.

# `receive`

```elixir
@spec receive(repo_or_conn(), queue_name(), consumer_name(), pos_integer(), keyword()) ::
  {:ok, {integer() | nil, [map()]}} | {:error, term()}
```

Receives a batch of messages from a queue for the given consumer.

# `receive_coop`

```elixir
@spec receive_coop(
  repo_or_conn(),
  queue_name(),
  consumer_name(),
  String.t(),
  pos_integer(),
  keyword()
) ::
  {:ok, {integer() | nil, [map()]}} | {:error, term()}
```

Receives a batch of messages cooperatively as a subconsumer within a consumer group.

# `set_queue_config`

```elixir
@spec set_queue_config(
  repo_or_conn(),
  queue_name(),
  String.t(),
  String.t(),
  keyword()
) ::
  {:ok, term()} | {:error, term()}
```

Sets a configuration parameter for a queue.

# `subscribe`

```elixir
@spec subscribe(repo_or_conn(), queue_name(), consumer_name(), keyword()) ::
  {:ok, integer()} | {:error, term()}
```

Registers a consumer subscription for a queue.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
