Skip to content

Endpoints ​

The Endpoints view shows every message endpoint across your monitored services — both inbound listeners (where messages are received) and outbound senders (where messages are published). It lives as a tab in the Messaging Explorer and as a standalone page at /endpoints (the old /listeners URL redirects here).

CritterWatch Endpoints — every inbound listener and outbound sender across services with status, direction, transport, and bulk pause/drain/restart controls

Endpoint grid ​

Each endpoint is a row. The grid leads with a selection checkbox (bulk actions operate on the rows you tick):

ColumnDescription
ServiceOwning service (shown in fleet/multi-service scope)
(icon)Transport scheme icon
NameFriendly endpoint name; falls back to the URI when the transport doesn't supply one (so exchange senders are no longer blank)
URIThe endpoint address, with a transport-type tag and a row of line-2 pills (broker role, mode, listener, system, interop, tags)
StatusRuntime status (see below), with small CB / BP icons when the circuit breaker has tripped or back pressure is active
DirectionInbound / Outbound / Both / Local
TagsTransport tag icons

Six metrics columns — Msgs/hr, Sent/hr, Rcvd/hr, Avg Exec, DLQ/hr, Errors/hr — are hidden by default and revealed by the Metrics toggle in the toolbar (the preference is remembered). The grid also offers transport/scheme and direction facets, a URI search box, and a "hide system endpoints" toggle.

Status values ​

StatusMeaning
AcceptingListener is running and processing messages normally
StoppedListener has been paused by an operator
TooBusyBack pressure is throttling this listener
LatchedCircuit breaker has tripped — paused due to repeated failures
Active / LatchedFor senders (no listening status of their own): Active when the sender circuit is closed, Latched when it has tripped

A listener can read Accepting while its transport channel is actually dead. When that happens, CritterWatch surfaces a dark health pill under the status — Disconnected (the channel dropped) or Faulted (the receive loop stopped) — so a silently-stuck listener is visible instead of looking healthy. An opt-in, rate-limited auto-kickstart can restart such a listener for you.

Two more pills read how full an accepting listener is. Both need a monitored service on Wolverine 6.32 or later, and both stay hidden while the listener is healthy:

  • In flight N/L — an Inline or NativeAck listener is holding as many unacknowledged deliveries as its in-flight limit, normally the broker's prefetch window. It takes no more until a handler finishes. On these two modes the local buffer limit does nothing, so this is the ceiling that matters. A transport with no in-flight limit shows no pill rather than an invented one.
  • Hot partition — on a group-partitioned listener, one lane holds at least twice the average depth (and at least 10 messages). The listener's depth is the sum across lanes, so an even spread and a single stalled group read the same without this. Messages in one group run one at a time, so a slow or failing group backs up its whole lane. The exempt lane is left out of the average because it has its own parallelism.

Two more read a listener's in-memory idempotency guard, on Inline, Buffered and NativeAck listeners that have one configured. They need Wolverine 6.32 or later in the monitored service. Both count from when the service's process started, on that node, and show nothing until there is something to count:

  • N duplicates dropped (information, not a fault) — redeliveries the guard recognised and did not run again. A number that keeps climbing means the broker is redelivering, usually because handlers run longer than the delivery timeout.
  • Idempotency window shortened — the guard ran out of room for the ids it tracks and forgot some before the configured window elapsed. A redelivery arriving after that shortened window runs again. Raise maxTracked in WithInMemoryIdempotency(window, maxTracked) (the default is 100,000) until the pill stops appearing after a restart.

Endpoint controls ​

Lifecycle actions are bulk-only: tick one or more rows, then use the toolbar buttons. (Per-row Pause/Restart buttons were removed to reclaim column space.)

Toolbar actionEffect
Pause SelectedStop consuming on the selected listeners across the entire application, durably. Every node stops pulling, and the pause survives restarts + new nodes joining until you resume. Messages stay safely on the broker.
Drain SelectedGraceful shutdown — stop accepting new messages but let queued + in-flight work finish, then halt. The right call before a deploy.
Restart SelectedResume paused or drained listeners across every node; the backlog that accumulated drains down.

See the downstream-system-broken scenario for the full pause-and-resume workflow.

Pause All / Restart All apply to every endpoint in one service. They appear only on the standalone Endpoints page when a single service is selected and nothing is ticked — they're hidden inside the embedded Messaging Explorer tab.

Edit endpoint (per-row kebab) ​

Each row's actions live in a compact ⋮ kebab menu; its Edit item opens an Edit Endpoint drawer with two forms applied to the running endpoint without a restart:

  • Buffering limits — Maximum (messages to buffer) and Restart Threshold.
  • Circuit breaker — Failure Percentage Threshold and Pause Time (seconds).

Transport Type Icons ​

CritterWatch displays a transport icon alongside each endpoint URI to make it easy to identify at a glance:

  • RabbitMQ (rabbit icon)
  • SQL Server (database icon)
  • In-memory (lightning bolt icon)
  • Kafka (stream icon)
  • Azure Service Bus (cloud icon)

Free for read-only monitoring. A commercial license is required for administrative actions and the MCP server.