pub struct ReliableConsumer {Show 22 fields
pub group: ConsumerGroupName,
pub agent: Option<AgentId>,
pub topic: String,
pub dedup_window: usize,
pub retry: RetryPolicy,
pub understood_features: u64,
pub poll_interval: Duration,
pub shutdown_grace: Duration,
pub concurrency: ConcurrencyPolicy,
pub max_queued_records: usize,
pub max_queued_bytes: usize,
pub respond_on: Option<AgentTopic<'static>>,
pub inbox_route: InboxRoute,
pub ack_on_pickup: bool,
pub deduplicator: Option<Box<dyn Deduplicator>>,
pub warm_dedup: bool,
pub middleware: Vec<Arc<dyn AgentMiddleware>>,
pub on_dead_letter: Option<Arc<dyn DeadLetterSink>>,
pub operations: Option<Vec<String>>,
pub sessions: Option<SessionConfig>,
pub verifier: Option<Arc<KeyRegistry>>,
pub signing_key: Option<Arc<SigningKey>>,
}Expand description
The reliable consumer (consumer-group delivery + dedup + retry + DLQ). Most callers use Agent::builder, not this directly.
Fields§
§group: ConsumerGroupName§agent: Option<AgentId>Logical identity used for target filtering and replies. It is never inferred from the deployment group name.
topic: String§dedup_window: usize§retry: RetryPolicy§understood_features: u64Must-understand AGDX feature bits implemented by this receiver. Messages requiring any other bit are dead-lettered before dispatch.
poll_interval: DurationPoll interval, default a reactive 10ms. Raise for throughput-bound work.
shutdown_grace: DurationHow long a graceful shutdown waits for the in-flight message to finish
before dropping the consumer. run returns LaserError::Timeout if the
grace elapses with a message still in flight. Default 30s.
concurrency: ConcurrencyPolicyHow message handling is scheduled across partitions. Defaults to
ConcurrencyPolicy::Serial (strict one-at-a-time).
max_queued_records: usizeMaximum records buffered across partition lanes.
max_queued_bytes: usizeMaximum payload and header bytes buffered across partition lanes.
respond_on: Option<AgentTopic<'static>>§inbox_route: InboxRouteDefault inbox route for the ctx’s directed-send and fan-out helpers.
ack_on_pickup: boolEmit a Working task status on respond_on the moment an AGDX command is
picked up, before the handler runs, so a contract
caller can tell the command was consumed (versus expired unconsumed). Off by
default. Requires respond_on and a valid agent id.
deduplicator: Option<Box<dyn Deduplicator>>§warm_dedup: bool§middleware: Vec<Arc<dyn AgentMiddleware>>Cross-cutting hooks wrapped around each handler dispatch, in order, for auth, metrics, and tracing without touching the handler.
on_dead_letter: Option<Arc<dyn DeadLetterSink>>Notified on every dead-letter with the result of publishing it, so a lost poison message (a DLQ publish failure) is an observable event, not a log line.
operations: Option<Vec<String>>The command operations the handler serves. None serves every
operation. A command for another operation is reported as skipped,
so a model or tool record an agent writes for itself never becomes its
own work.
sessions: Option<SessionConfig>The session configuration the runtime applies: the session lens
handlers read through AgentCtx::session, and
SessionConfig::fail_on_dead_letter. Defaults to
SessionConfig::default.
verifier: Option<Arc<KeyRegistry>>When set, every message’s envelope signature is verified against this registry before dispatch, and an unsigned or unverified record is dead-lettered. Set it on control and effect topics, where verification is mandatory (the enforcement chokepoint for authorship and authorization).
signing_key: Option<Arc<SigningKey>>This consumer’s signing identity, threaded into AgentCtx so respond
answers correlated commands with signed AGDX responses.
Implementations§
Source§impl ReliableConsumer
impl ReliableConsumer
Sourcepub fn builder() -> ReliableConsumerBuilder
pub fn builder() -> ReliableConsumerBuilder
Create an instance of ReliableConsumer using the builder syntax
Source§impl ReliableConsumer
impl ReliableConsumer
Sourcepub async fn run<H>(
self,
laser: &Laser,
handler: H,
ready: Sender<()>,
shutdown: Receiver<()>,
) -> Result<(), LaserError>
pub async fn run<H>( self, laser: &Laser, handler: H, ready: Sender<()>, shutdown: Receiver<()>, ) -> Result<(), LaserError>
Consume until shutdown fires, dispatching each message to handler.
ready fires once the consumer has joined its group and is polling.
Delivery runs on ConsumerGroup::consumer,
so a server that resolves group policies reads through the group-aware
engine. On agent.sessions and agent.control, when the server serves
filtered reads and the filter catalog, the group is bound to the
addressee filter agdx.to In [<agent>, "*"] before it reads. A group
bound to another filter is refused. On open Apache Iggy the group
stays unbound and records are classified on the client. A capability
probe that established nothing is an error.
Auto Trait Implementations§
impl !RefUnwindSafe for ReliableConsumer
impl !UnwindSafe for ReliableConsumer
impl Freeze for ReliableConsumer
impl Send for ReliableConsumer
impl Sync for ReliableConsumer
impl Unpin for ReliableConsumer
impl UnsafeUnpin for ReliableConsumer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.