Appendix L: Glossary
Definitions of key terms, patterns, and technologies used throughout this tutorial.
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.