Appendix L: Glossary

Definitions of key terms, patterns, and technologies used throughout this tutorial.

10 minutesChapter 30appendices

A quick-reference glossary of terms used throughout this tutorial, organized by category.

EIP Patterns

Aggregator β€” A stateful processor that collects related messages and combines them into a single message. Requires a correlation expression, an aggregation strategy, and a completion condition. (Chapter 13)

Channel Adapter β€” Connects an application to the messaging system. Translates between application-specific protocols and message channels. (Chapter 2)

Channel Purger β€” Removes unwanted messages from a channel. Useful for clearing test messages or stale data. (Chapter 16)

Competing Consumers β€” Multiple consumers on the same channel, where each message is processed by exactly one consumer. Provides horizontal scalability. In Kafka, implemented via consumer groups. (Chapter 14)

Composed Message Processor β€” Splits a composite message, processes each part independently, and reassembles the results. Combines Splitter + Router + Aggregator. (Chapter 11)

Content-Based Router β€” Routes a message to the correct recipient based on message content. In Camel: choice().when().otherwise(). (Chapter 9)

Content Enricher β€” Augments a message with data from an external source. In Camel: enrich() or pollEnrich(). (Chapter 12)

Content Filter β€” Removes unwanted data from a message, keeping only relevant fields. In Camel: transform() or process(). (Chapter 12)

Control Bus β€” Manages and monitors the messaging system. In Camel: controlbus: component for starting/stopping routes, querying status. (Chapter 17)

Correlation Identifier β€” A unique identifier carried through a message flow to correlate requests with replies or related messages. Typically a header like correlationId or a Kafka key. (Chapter 8)

Datatype Channel β€” A channel where all messages conform to a specific data type. In Kafka: enforced by schema registry (Avro/Protobuf). (Chapter 5)

Dead Letter Channel β€” A channel that receives messages that cannot be processed successfully after all retries are exhausted. In Camel: errorHandler(deadLetterChannel()). (Chapter 4)

Detour β€” Routes messages through an additional processing step that can be toggled on/off without changing the route. Used for debugging, testing, and feature flags. (Chapter 18)

Document Message β€” A message that carries a complete data record. The receiver needs no additional context. Contrasts with Event Message. (Chapter 7)

Durable Subscriber β€” A subscriber that receives messages published while it was offline. In Kafka: the default behavior via consumer group offsets. (Chapter 15)

Dynamic Router β€” Routes messages to destinations determined at runtime by evaluating a routing function on each iteration. In Camel: dynamicRouter(). (Chapter 11)

Envelope Wrapper β€” Wraps application-specific data in a messaging envelope (headers + body), or unwraps it. JSON payloads with metadata headers are a common form. (Chapter 12)

Event-Driven Consumer β€” A consumer that is notified when a message arrives, rather than polling for it. Kafka consumers in their standard loop are event-driven. (Chapter 14)

Event Message β€” A message that signals something has happened. Typically immutable and past-tense (e.g., order.placed). Contrasts with Command Message. (Chapter 7)

Format Indicator β€” Metadata that identifies the format or schema version of a message. Enables schema evolution (e.g., Avro schema ID in the message header). (Chapter 8)

Guaranteed Delivery β€” Ensures a message is not lost, even if the messaging system or consumer fails. In Kafka: acks=all + min.insync.replicas. (Chapter 4)

Idempotent Receiver β€” Ensures a message is processed at most once, even if delivered multiple times. In Camel: idempotentConsumer() with a repository (memory, JDBC, Redis). (Chapter 15)

Invalid Message Channel β€” A channel for messages that fail validation. Separates bad data from the main processing flow. (Chapter 5)

Load Balancer β€” Distributes messages across multiple endpoints using a strategy (round-robin, random, failover, weighted). In Camel: loadBalance(). (Chapter 11)

Message β€” The atomic unit of communication in a messaging system. Consists of headers (metadata) and a body (payload). (Chapter 3)

Message Bus β€” An architecture where applications communicate through a shared messaging infrastructure. Kafka is our message bus. (Chapter 3)

Message Channel β€” A logical pathway for messages between sender and receiver. In Kafka: a topic. In Pulsar: a topic. In Redis: a Stream or Pub/Sub channel. (Chapter 3)

Message Dispatcher β€” Consumes messages from a channel and distributes them to performers based on criteria. In Camel: choice() inside a consumer route. (Chapter 14)

Message Endpoint β€” The boundary between application code and the messaging system. In Camel: the from() and to() URIs in a route. (Chapter 3)

Message Expiration β€” A time-to-live on a message. Expired messages are discarded. In Kafka: retention.ms on topics. In Camel: checked via headers in the route. (Chapter 8)

Message Filter β€” Drops messages that don’t match a predicate. In Camel: filter(). (Chapter 9)

Message History β€” Records the processing path a message has taken. In Camel: automatic via Exchange.MESSAGE_HISTORY when enabled. Useful for debugging. (Chapter 17)

Message Sequence β€” A set of messages that form an ordered sequence, identified by sequence number and a completion marker. Used when splitting a large payload. (Chapter 8)

Message Store β€” Persists messages for replay, audit, or debugging. In Kafka: the log is the store. For Wire Taps: a database or object store. (Chapter 17)

Message Translator β€” Transforms a message from one format to another. In Camel: transform(), marshal(), unmarshal(), or a Processor. (Chapter 12)

Messaging Bridge β€” Connects two messaging systems. For example, bridging Kafka to Pulsar or Redis Streams. (Chapter 6)

Messaging Gateway β€” Encapsulates messaging behind a domain-specific interface. The application calls a method; the gateway handles the messaging plumbing. (Chapter 16)

Messaging Mapper β€” Maps between domain objects and messaging formats. Jackson’s ObjectMapper with Camel’s marshal()/unmarshal() is the standard implementation. (Chapter 16)

Normalizer β€” Converts messages from different sources into a common canonical format. Combines a Router (detect format) with Translators (convert each format). (Chapter 13)

Pipes and Filters β€” Chains processing steps where each step (filter) transforms the message and passes it to the next via a pipe (channel). The core Camel route model. (Chapter 3)

Point-to-Point Channel β€” A channel where each message is consumed by exactly one receiver. In Kafka: a topic with a consumer group. (Chapter 4)

Polling Consumer β€” A consumer that actively checks for new messages on a schedule. In Camel: from("timer:...") or pollEnrich(). (Chapter 14)

Process Manager β€” Coordinates a multi-step business process, maintaining state across steps and handling compensation on failure. In Camel: Saga EIP. (Chapter 10)

Publish-Subscribe Channel β€” A channel where each message is delivered to all subscribers. In Kafka: multiple consumer groups on the same topic. (Chapter 4)

Recipient List β€” Routes a message to a dynamically computed list of recipients. In Camel: recipientList(). (Chapter 9)

Request-Reply β€” A two-message exchange: a request message and a corresponding reply message. In Camel: requestBody() or InOut exchange pattern. (Chapter 8)

Resequencer β€” Reorders out-of-sequence messages back into the correct order. In Camel: resequence() with batch or stream mode. (Chapter 11)

Return Address β€” A header that tells the receiver where to send the reply. In Kafka: a reply topic name in a message header. (Chapter 8)

Routing Slip β€” Defines a sequence of processing steps attached to the message itself. The message carries its own routing instructions. In Camel: routingSlip(). (Chapter 10)

Scatter-Gather β€” Broadcasts a message to multiple recipients and aggregates their replies. Combines Recipient List + Aggregator. (Chapter 10)

Selective Consumer β€” A consumer that filters messages based on criteria, processing only those that match. In Camel: filter() at the start of a consumer route. (Chapter 16)

Service Activator β€” Connects a service to the messaging system. Receives a request message, invokes the service, and sends the result as a reply. In Camel: bean(). (Chapter 15)

Smart Proxy β€” Intercepts request-reply interactions to add cross-cutting behavior (logging, transformation) transparently. (Chapter 18)

Splitter β€” Splits a composite message into individual parts for independent processing. In Camel: split(). (Chapter 9)

Test Message β€” A synthetic message injected to verify that the messaging system is functioning correctly. (Chapter 18)

Transactional Client β€” Sends/receives messages within a transaction, ensuring atomicity with other operations. The Outbox pattern is the preferred approach for Kafka. (Chapter 15)

Wire Tap β€” Sends a copy of a message to a secondary channel for monitoring, logging, or debugging. In Camel: wireTap(). (Chapter 11, 17)

Apache Camel concepts

CamelContext β€” The runtime container for Camel routes, components, and configuration. One CamelContext per application (in Quarkus, managed by the CDI container).

Component β€” A factory for endpoints. Each URI scheme maps to a component: kafka: β†’ KafkaComponent, http: β†’ HttpComponent. Components are auto-discovered from the classpath.

Consumer β€” The inbound side of an endpoint. Creates exchanges from external events (Kafka messages, HTTP requests, timer ticks).

DSL (Domain-Specific Language) β€” The API used to define Camel routes. This tutorial uses the Java DSL exclusively. Camel also supports YAML DSL and XML DSL.

Endpoint β€” A channel identified by a URI. kafka:eip.orders.placed?brokers=localhost:9092 is a Kafka endpoint. Endpoints are both producers and consumers.

Exchange β€” The message container that flows through a route. Contains an In message (and optionally an Out message for InOut exchanges), headers, properties, and the exchange pattern.

ExchangePattern β€” InOnly (fire-and-forget) or InOut (request-reply). Kafka is typically InOnly; HTTP is typically InOut.

FluentProducerTemplate β€” A builder-style API for sending messages programmatically: producer.to("direct:foo").withBody(data).request(String.class).

Processor β€” A function that transforms an exchange. Implements Processor.process(Exchange).

Producer β€” The outbound side of an endpoint. Sends exchanges to external systems.

ProducerTemplate β€” A programmatic API for sending messages to endpoints without defining a route. Useful in CDI beans and tests.

Route β€” A processing pipeline from one endpoint to another, through zero or more processors. Defined in a RouteBuilder class.

RouteBuilder β€” The base class for defining routes in Java DSL. Extend it, override configure(), add routes with from().to().

Simple Expression Language β€” Camel’s built-in expression language. Access headers: ${header.foo}, body: ${body}, body fields: ${body.orderId}. Used in simple(), filter(), choice().

Infrastructure

Apache Kafka β€” A distributed event streaming platform. Used as the primary messaging backbone in this tutorial. Key concepts: topics, partitions, consumer groups, offsets.

Apache Pulsar β€” A multi-tenant distributed messaging platform. Used alongside Kafka for geo-replication and multi-tenancy scenarios. Key concepts: tenants, namespaces, topics, subscriptions.

Apicurio Registry β€” A schema registry for Avro, Protobuf, and JSON Schema. Stores and serves schemas for Kafka serialization/deserialization.

Consumer Group β€” A set of Kafka consumers that cooperate to consume from a topic. Each partition is assigned to exactly one consumer in the group. Adding consumers to a group increases parallelism (up to the partition count).

Idempotent Repository β€” A Camel abstraction for tracking processed message IDs. Implementations: in-memory, JDBC, Redis, Kafka (topic-based).

KRaft β€” Kafka’s built-in consensus protocol (replaces ZooKeeper). Used in all examples in this tutorial.

Offset β€” A sequential position in a Kafka partition. Each consumer group tracks its offset per partition. Committed offsets mark what has been processed.

Partition β€” A shard of a Kafka topic. Partitions provide parallelism and ordering guarantees (within a partition). Messages with the same key go to the same partition.

Podman β€” A daemonless container runtime. Used instead of Docker in this tutorial. All compose files work with podman-compose or podman compose.

Quarkus β€” A Kubernetes-native Java framework. Provides fast startup, live reload, Dev Services (automatic test containers), and native compilation via GraalVM.

Redis β€” An in-memory data store used for caching, idempotent repositories, and Pub/Sub messaging. In this tutorial: idempotent consumer state, rate limiting, and caching enrichment results.

Shipping domain

Carrier β€” A shipping provider (FedEx, UPS, USPS, DHL). Each carrier has its own API, rate structure, and service constraints.

Customs classification β€” Categorizing shipped goods by HS (Harmonized System) code for international shipments. Determines tariffs and regulatory requirements.

Hazmat (hazardous materials) β€” Shipments containing dangerous goods. Subject to special routing, labeling, and carrier restrictions.

Inventory service β€” Manages stock levels. Consumes order events and emits reservation/confirmation events.

Notification service β€” Sends customer-facing messages (email, SMS) triggered by shipment events.

Order service β€” The entry point for customer orders. Publishes order.placed events to Kafka.

Payment service β€” Processes payments. Participates in the saga (compensates with refunds on failure).

Shipping service β€” Selects carriers, generates labels, and tracks shipments. The most integration-heavy service in the domain.


Verification status: verified β€” glossary reference chapter, no runnable example.