Este contenido no está disponible en el idioma seleccionado.
Chapter 2. Understand MicroProfile
2.1. MicroProfile Config Copiar enlaceEnlace copiado en el portapapeles!
2.1.1. MicroProfile Config in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
Configuration data can change dynamically and applications need to be able to access the latest configuration information without restarting the server.
MicroProfile Config provides portable externalization of configuration data. This means, you can configure applications and microservices to run in multiple environments without modification or repackaging.
MicroProfile Config functionality is implemented in JBoss EAP using the SmallRye Config component and is provided by the microprofile-config-smallrye subsystem.
MicroProfile Config is only supported in JBoss EAP XP. It is not supported in JBoss EAP.
If you are adding your own Config implementations, you need to use the methods in the latest version of the Config interface.
Additional resources
2.1.2. MicroProfile Config sources supported in MicroProfile Config Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile Config configuration properties can come from different locations and can be in different formats. These properties are provided by ConfigSources. ConfigSources are implementations of the org.eclipse.microprofile.config.spi.ConfigSource interface.
The MicroProfile Config specification provides the following default ConfigSource implementations for retrieving configuration values:
-
System.getProperties(). -
System.getenv(). -
All
META-INF/microprofile-config.propertiesfiles on the class path.
The microprofile-config-smallrye subsystem supports additional types of ConfigSource resources for retrieving configuration values. You can also retrieve the configuration values from the following resources:
-
Properties in a
microprofile-config-smallrye/config-sourcemanagement resource - Files in a directory
-
ConfigSourceclass -
ConfigSourceProviderclass
Additional resources
2.2. MicroProfile Fault Tolerance Copiar enlaceEnlace copiado en el portapapeles!
2.2.1. About MicroProfile Fault Tolerance specification Copiar enlaceEnlace copiado en el portapapeles!
The MicroProfile Fault Tolerance specification defines strategies to deal with errors inherent in distributed microservices.
The MicroProfile Fault Tolerance specification defines the following strategies to handle errors:
- Timeout
- Define the amount of time within which an execution must finish. Defining a timeout prevents waiting for an execution indefinitely.
- Retry
- Define the criteria for retrying a failed execution.
- Fallback
- Provide an alternative in the case of a failed execution.
- CircuitBreaker
- Define the number of failed execution attempts before temporarily stopping. You can define the length of the delay before resuming execution.
- Bulkhead
- Isolate failures in part of the system so that the rest of the system can still function.
- Asynchronous
- Execute client request in a separate thread.
Additional resources
2.2.2. MicroProfile Fault Tolerance in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
The microprofile-fault-tolerance-smallrye subsystem provides support for MicroProfile Fault Tolerance in JBoss EAP. The subsystem is available only in the JBoss EAP XP stream.
The microprofile-fault-tolerance-smallrye subsystem provides the following annotations for interceptor bindings:
-
@Timeout -
@Retry -
@Fallback -
@CircuitBreaker -
@Bulkhead -
@Asynchronous
You can bind these annotations at the class level or at the method level. An annotation bound to a class applies to all of the business methods of that class.
The following rules apply to binding interceptors:
If a component class declares or inherits a class-level interceptor binding, the following restrictions apply:
- The class must not be declared final.
- The class must not contain any static, private, or final methods.
- If a non-static, non-private method of a component class declares a method level interceptor binding, neither the method nor the component class may be declared final.
Fault tolerance operations have the following restrictions:
- Fault tolerance interceptor bindings must be applied to a bean class or bean class method.
- When invoked, the invocation must be the business method invocation as defined in the Jakarta Contexts and Dependency Injection specification.
An operation is not considered fault tolerant if both of the following conditions are true:
- The method itself is not bound to any fault tolerance interceptor.
- The class containing the method is not bound to any fault tolerance interceptor.
The microprofile-fault-tolerance-smallrye subsystem provides the following configuration options, in addition to the configuration options provided by MicroProfile Fault Tolerance:
-
io.smallrye.faulttolerance.mainThreadPoolSize -
io.smallrye.faulttolerance.mainThreadPoolQueueSize -
smallrye.faulttolerance.micrometer.disabled -
smallrye.faulttolerance.opentelemetry.disabled
2.2.3. Integrating MicroProfile Fault Tolerance 4.1 with JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
You can use the MicroProfile Fault Tolerance 4.1 specification from MicroProfile Platform 7.0 in JBoss EAP. SmallRye Fault Tolerance implements this specification, adding features such as @Timeout, @Fallback, @Retry, and @CircuitBreaker. These features improve application resilience and reliability in a microservices architecture.
Additionally, you can use MicroProfile Telemetry to collect metrics for fault-tolerant components, providing a detailed view of their performance and health.
By upgrading to JBoss EAP XP 6.0, your applications can use the latest standards for fault tolerance and telemetry metrics collection, enabling you to build more robust and observable systems.
Prerequisites
- JBoss EAP 8.1 with JBoss EAP XP 6.0 has been installed, which provides an implementation of MicroProfile Fault Tolerance 4.1 specification.
- You have the MicroProfile Telemetry subsystem available in your server configuration. For more information, see Add MicroProfile Telemetry subsystem using the management CLI.
- Ensure the application is a MicroProfile Fault Tolerance application, such as the MicroProfile Fault Tolerance Quickstart, and is properly configured to push collected metrics to a metrics collector. For more information, see MicroProfile Telemetry administration to configure MicroProfile Telemetry.
Procedure
- Open a terminal.
Start JBoss EAP server as a standalone server by using the following script:
$ <EAP_HOME>/bin/standalone.sh -c standalone-microprofile.xmlNoteFor Windows server, use the
<EAP_HOME>\bin\standalone.batscript.- Open a new terminal.
- Navigate to the application root directory.
- Add the MicroProfile Fault Tolerance extension to JBoss EAP. For more information, see Adding the MicroProfile Fault Tolerance extension.
Enable metrics collection integration by adding the MicroProfile Telemetry extension and subsystem to your configuration.
Note- Metrics are collected using Micrometer if the Micrometer subsystem is available. When both the MicroProfile Telemetry and Micrometer subsystems are available, metrics will be collected by using both unless explicitly disabled through MicroProfile Config properties.
- If neither the MicroProfile Telemetry nor the Micrometer subsystems are available, no MicroProfile Fault Tolerance metrics data will be collected.
- JBoss EAP does not include the MicroProfile Metrics specification implementation or subsystem, and this integration is not supported.
Enable the corresponding subsystem if using Micrometer or OpenTelemetry. For more information, see:
Reload JBoss EAP to activate the changes after applying the configurations by running the following command:
reloadYou can now see the MicroProfile Fault Tolerance related metrics collected by the configured collector.
2.3. MicroProfile Health Copiar enlaceEnlace copiado en el portapapeles!
2.3.1. MicroProfile Health in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
JBoss EAP includes the SmallRye Health component, which you can use to determine whether the JBoss EAP instance is responding as expected. This capability is enabled by default.
MicroProfile Health is only available when running JBoss EAP as a standalone server.
The MicroProfile Health specification defines the following health checks:
- Readiness
-
Determines whether an application is ready to process requests. The annotation
@Readinessprovides this health check. - Liveness
-
Determines whether an application is running. The annotation
@Livenessprovides this health check. - Startup
-
Determines whether an application has already started. The annotation
@Startupprovides this health check.
The @Health annotation was removed in MicroProfile Health 3.0.
MicroProfile Health 3.1 includes a new Startup health check probe.
For more information about the changes in MicroProfile Health 3.1, see Release Notes for MicroProfile Health 3.1.
The :empty-readiness-checks-status, :empty-liveness-checks-status, and :empty-startup-checks-status management attributes specify the global status when no readiness, liveness, or startup probes are defined.
2.4. MicroProfile JWT Copiar enlaceEnlace copiado en el portapapeles!
2.4.1. MicroProfile JWT integration in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
The subsystem microprofile-jwt-smallrye provides MicroProfile JWT integration in JBoss EAP.
The following functionalities are provided by the microprofile-jwt-smallrye subsystem:
- Detecting deployments that use MicroProfile JWT security.
- Activating support for MicroProfile JWT.
The subsystem contains no configurable attributes or resources.
In addition to the microprofile-jwt-smallrye subsystem, the org.eclipse.microprofile.jwt.auth.api module provides MicroProfile JWT integration in JBoss EAP.
Additional resources
2.4.2. Differences between a traditional deployment and an MicroProfile JWT deployment Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile JWT deployments do not depend on managed SecurityDomain resources like traditional JBoss EAP deployments. Instead, a virtual SecurityDomain is created and used across the MicroProfile JWT deployment.
As the MicroProfile JWT deployment is configured entirely within the MicroProfile Config properties and the microprofile-jwt-smallrye subsystem, the virtual SecurityDomain does not need any other managed configuration for the deployment.
2.4.3. MicroProfile JWT activation in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile JWT is activated for applications based on the presence of an auth-method in the application.
The MicroProfile JWT integration is activated for an application in the following way:
-
As part of the deployment process, JBoss EAP scans the application archive for the presence of an
auth-method. -
If an
auth-methodis present and defined asMP-JWT, the MicroProfile JWT integration is activated.
The auth-method can be specified in either or both of the following files:
-
the file containing the class that extends
javax.ws.rs.core.Application, annotated with the@LoginConfig -
the
web.xmlconfiguration file
If auth-method is defined both in a class, using annotation, and in the web.xml configuration file, the definition in web.xml configuration file is used.
2.4.4. Limitations of MicroProfile JWT in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
The MicroProfile JWT implementation in JBoss EAP has certain limitations.
The following limitations of MicroProfile JWT implementation exist in JBoss EAP:
-
The MicroProfile JWT implementation parses only the first key from the JSON Web Key Set (JWKS) supplied in the
mp.jwt.verify.publickeyproperty. Therefore, if a token claims to be signed by the second key or any key after the second key, the token fails verification and the request containing the token is not authorized. - Base64 encoding of JWKS is not supported.
In both cases, a clear text JWKS can be referenced instead of using the mp.jwt.verify.publickey.location config property.
2.5. MicroProfile OpenAPI Copiar enlaceEnlace copiado en el portapapeles!
2.5.1. MicroProfile OpenAPI in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile OpenAPI is integrated in JBoss EAP using the microprofile-openapi-smallrye subsystem.
The MicroProfile OpenAPI specification defines an HTTP endpoint that serves an OpenAPI 3.0 document. The OpenAPI 3.0 document describes the REST services for the host. The OpenAPI endpoint is registered using the configured path, for example http://localhost:8080/openapi, local to the root of the host associated with a deployment.
Currently, the OpenAPI endpoint for a virtual host can only document a single deployment. To use OpenAPI with multiple deployments registered with different context paths on the same virtual host, each deployment must use a distinct endpoint path.
The OpenAPI endpoint returns a YAML document by default. You can also request a JSON document using an Accept HTTP header, or a format query parameter.
If the Undertow server or host of a given application defines an HTTPS listener then the OpenAPI document is also available using HTTPS. For example, an endpoint for HTTPS is https://localhost:8443/openapi.
2.6. MicroProfile Long Running Action Copiar enlaceEnlace copiado en el portapapeles!
2.6.1. MicroProfile Long Running Action (LRA) with Narayana Copiar enlaceEnlace copiado en el portapapeles!
JBoss EAP XP provides full support for MicroProfile Long Running Action (LRA) without HA capabilities. This is a standalone MicroProfile specification providing an API for distributed transactions handling based on the saga pattern. This provides a way for transaction handling without requiring a lock on remote resources. The MicroProfile Long Running Action key features include:
- Direct Execution
- Each participant in the transaction performs the required operations upon request, rather than by prepare and commit phases found in two-phase commit (2PC) protocols.
- Compensating Actions
- Each participant must define a compensating action to reverse the operation if the saga or LRA is canceled, ensuring a return to a consistent state.
- Eventual Consistency
- LRA operates on the BASE model rather than the ACID model, focusing on eventual consistency and guaranteeing that all ongoing LRAs will complete if no new ones are initiated. This is in contrast to operating on the ACID model, that focuses on consistency over availability.
- Required Extensions
-
Integration of MicroProfile Long Running Action is facilitated by the Narayana transaction manager. The Narayana implementation uses the LRA extensions and two subsystems, the
microprofile-lra-coordinatorand themicroprofile-lra-participant. - LRA Coordinator
-
The
microprofile-lra-coordinatorsubsystem is an integration of the Narayana LRA coordinator, a REST controller responsible for managing LRA executions. This maintains information about participants enlisted in the LRA and coordinates the closure or cancellation of an LRA to ensure that all participants are reliably notified of the decision to cancel the LRA.
When you provision your server with the microprofile-lra-coordinator Galleon layer, the required modules, extension, and subsystem, are included automatically.
The /subsystem=microprofile-lra-coordinator resource defines two attributes:
host-
The name of the Undertow subsystem
hostresource that the LRA Coordinator is deployed to. server-
The name of the Undertow subsystem
serverresource that the LRA Coordinator is deployed to.
The Undertow related attributes usually do not need to be configured, but may need to be configured based on application specific requirements.
- LRA Participant
-
The
microprofile-lra-participantsubsystem is the integration of the MicroProfile Long Running Action specification. This subsystem provides annotations to define the LRA execution specifics and use a JAX-RS filter that intercepts JAX-RS requests to methods annotated with@LRAand, with the coordinator, manages the lifecycle of an LRA.
When you provision your server with the microprofile-lra-participant Galleon layer, the required modules, extension, and subsystem, are included automatically.
The /subsystem=microprofile-lra-participant resource defines three attributes:
lra-coordinator-url- The configuration of the LRA Coordinator URL required in order for this participant to connect to the coordinator.
proxy-host-
The name of the Undertow subsystem
hostresource that the LRA Participant proxy deploys to. proxy-server-
The name of the Undertow subsystem
serverresource that the LRA Participant proxy deploys to.
The Undertow related attributes usually do not need to be configured, but may need to be configured based on application specific requirements.
- Configuring LRA
-
You can configure the LRA extensions and the two subsystems (one for LRA coordinator and LRA participant respectively) by either using the
enable-microprofile-lra.cliscript, adding the extension modules to your XML configuration, or by running CLI commands. - Configuring LRA using the
enable-microprofile-lra.cliscript -
You can configure the LRA extensions and the two subsystems (one for LRA coordinator and LRA participant respectively) by using the
enable-microprofile-lra.cliscript.
Prerequisites
Configuring LRA using the
enable-microprofile-lra.cliscript:- JBoss EAP 8.1 with JBoss EAP XP 6.0 has been installed, which provides an implementation of MicroProfile Long Running Action.
- Ensure the application is an LRA application, such as the MicroProfile Long Running Action Quickstart.
-
Ensure you have reviewed the
enable-microprofile-lra.cliscript that is available in the root directory of the MicroProfile Long Running Action Quickstart.
Configuring LRA by adding the modules to your XML configuration:
- JBoss EAP 8.1 with JBoss EAP XP 6.0 has been installed, which provides an implementation of MicroProfile Long Running Action.
- Ensure the application is an LRA application, such as the MicroProfile Long Running Action Quickstart.
Configuring LRA by running CLI commands:
- JBoss EAP 8.1 with JBoss EAP XP 6.0 has been installed, which provides an implementation of MicroProfile Long Running Action.
Ensure the application is an LRA application, such as the MicroProfile Long Running Action Quickstart.
- Configuring LRA using the
enable-microprofile-lra.cliscript .Procedure
- In the terminal, navigate to the root directory of your application.
Replace
<JBOSS_HOME>with the path to your server and run theenable-microprofile-lra.cliscript:$ <JBOSS_HOME>/bin/jboss-cli.sh --connect --file=enable-microprofile-lra.cliNoteFor Windows, use the
<JBOSS_HOME>\bin\jboss-cli.batscript. You should see the following result when you run the script:The batch executed successfully.
- Configuring LRA by adding the modules to your XML configuration
Add the LRA Coordinator and Participant extensions, and subsystems, to your XML configuration:
<extension module="org.wildfly.extension.microprofile.lra-coordinator"/> <extension module="org.wildfly.extension.microprofile.lra-participant"/> <subsystem xmlns="urn:wildfly:microprofile-lra-coordinator:1.0"/> <subsystem xmlns="urn:wildfly:microprofile-lra-participant:1.0"/>
- Configuring LRA by running CLI commands
To add the LRA Coordinator, use the following command:
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-coordinator:add() {"outcome" => "success"} [standalone@localhost:9990 /] /subsystem=microprofile-lra-coordinator:add() { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }To add the LRA Participant, use the following CLI command:
[standalone@localhost:9990 /] /extension=org.wildfly.extension.microprofile.lra-participant:add() {"outcome" => "success"} [standalone@localhost:9990 /] /subsystem=microprofile-lra-participant:add() { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }
- Node Identifier Constraint
-
A unique node identifier is crucial for JBoss EAP to recover transactions and their states specific to that identifier. You can set the node identifier by configuring the
com.arjuna.ats.arjuna.nodeIdentifierproperty. - Known Limitations
- Transaction Handling in a Multi-Coordinator Environment
- In a multi-coordinator setup, the management of an LRA is restricted to the coordinator that created it. This means that different coordinators cannot handle the same transactions, ensuring clear ownership and management.
- EAP Operator Support
- When using the EAP Operator for Bootable Jars, transaction recovery does not function during scale-down processes. This limitation is documented in JBEAP-20714.
- Singleton LRA Coordinator
The LRA coordinator should be treated as a singleton, meaning only one instance can handle requests for a single LRA. When deploying the LRA coordinator to OpenShift, ensure the pool size is set to 1.
This is necessary because the LRA coordinator is not scalable, unlike normal JTA transactions, which are local to the server. The LRA coordinator acts as a server endpoint for remote applications, lacking high-availability capabilities as scaling is not currently supported.
- Configuring LRA using the
Additional resources
2.7. MicroProfile Telemetry Copiar enlaceEnlace copiado en el portapapeles!
2.7.1. MicroProfile Telemetry in JBoss EAP Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile Telemetry provides tracing, metrics, and logging functionalities for applications based on OpenTelemetry.
- MicroProfile Telemetry Tracing: Track service requests across service boundaries. This can be very useful in a microservices environment where a request can flow through multiple services during its life cycle.
- MicroProfile Telemetry Metrics: Capture snapshot measurements that are representative of your application’s behavior, such as JVM performance counters, to ensure that your application is functioning correctly. Application and runtime metrics collection is activated when you enable the MicroProfile Telemetry subsystem. You can define custom metrics using the OpenTelemetry API that is exposed by the subsystem.
-
MicroProfile Telemetry Logs: Bridge logs at runtime from various log frameworks, such as
log4j, into OpenTelemetry to troubleshoot runtime errors. You cannot use OpenTelemetry Logs to define new log APIs. Logging is activated when you enable the MicroProfile Telemetry subsystem.
MicroProfile Telemetry expands on the OpenTelemetry subsystem and adds support for MicroProfile Config. This allows users to configure OpenTelemetry using MicroProfile Config.
There are no configurable resources or attributes in the MicroProfile Telemetry subsystem.
Users have a few choices for metrics collection: MicroProfile Telemetry, WildFly Metrics, and Micrometer. Multiple metrics systems should not be used at the same time to avoid decreased server performance.
Your choice of metrics system depends on individual system needs. WildFly Metrics only provides JVM and server metrics unlike MicroProfile Telemetry, which provides tracing, metrics, and logging information for applications in addition to JVM and server metrics. While Micrometer and MicroProfile Telemetry are similar in functionality, if users are interested in collecting tracing information, MicroProfile Telemetry may be preferred because tracing and metrics functionalities use the same library.
2.8. MicroProfile REST Client Copiar enlaceEnlace copiado en el portapapeles!
2.8.1. MicroProfile REST client Copiar enlaceEnlace copiado en el portapapeles!
JBoss EAP XP 6.0.0 supports the MicroProfile REST Client 4.0 that builds on Jakarta RESTful Web Services 2.1.6 client APIs to provide a type-safe approach to invoke RESTful services over HTTP. The MicroProfile Type Safe REST clients are defined as Java interfaces. With the MicroProfile REST Clients, you can write client applications with executable code.
Use the MicroProfile REST Client to avail the following capabilities:
- An intuitive syntax
- Programmatic registration of providers
- Declarative registration of providers
- Declarative specification of headers
- Propagation of headers on the server
-
ResponseExceptionMapper - Jakarta Contexts and Dependency Injection integration
- Access to server-sent events (SSE)
2.8.2. The resteasy.original.webapplicationexception.behavior MicroProfile Config property Copiar enlaceEnlace copiado en el portapapeles!
MicroProfile Config is the name of a specification that developers can use to configure applications and microservices to run in multiple environments without having to modify or repackage those apps. Previously, MicroProfile Config was available for JBoss EAP as a technology preview, but it has since been removed. MicroProfile Config is now available only on JBoss EAP XP.
- Defining the
resteasy.original.webapplicationexception.behaviorMicroProfile Config property -
You can set the
resteasy.original.webapplicationexception.behaviorparameter as either aweb.xmlservlet property or a system property. Here’s an example of one such servlet property inweb.xml:
<context-param>
<param-name>resteasy.original.webapplicationexception.behavior</param-name>
<param-value>true</param-value>
</context-param>
You can also use MicroProfile Config to configure any other RESTEasy property.
2.9. MicroProfile Reactive Messaging Copiar enlaceEnlace copiado en el portapapeles!
2.9.1. MicroProfile Reactive Messaging Copiar enlaceEnlace copiado en el portapapeles!
When you upgrade to JBoss EAP XP 6.0.0, you can enable the newest version of MicroProfile Reactive Messaging, which includes reactive messaging extensions and subsystems.
A "reactive stream" is a succession of event data, along with processing protocols and standards, that is pushed across an asynchronous boundary (like a scheduler) without any buffering. An "event" might be a scheduled and repeating temperature check in a weather app, for example. The primary benefit of reactive streams is the seamless interoperability of your various applications and implementations.
Reactive messaging provides a framework for building event-driven, data-streaming, and event-sourcing applications. Reactive messaging results in the constant and smooth exchange of event data, the reactive stream, from one app to another. You can use MicroProfile Reactive Messaging for asynchronous messaging through reactive streams so that your application can interact with others, like Apache Kafka, for example.
After you upgrade your instance of MicroProfile Reactive Messaging to the latest version, you can do the following:
- Provision a server with MicroProfile Reactive Messaging for the Apache Kafka data-streaming platform.
- Interact with reactive messaging in-memory and backed by Apache Kafka topics through the latest reactive messaging APIs.
- Use any metric system available to determine the number of messages streamed on a given channel.
2.9.2. MicroProfile Reactive Messaging connectors Copiar enlaceEnlace copiado en el portapapeles!
You can use connectors to integrate MicroProfile Reactive Messaging with a number of external messaging systems. MicroProfile for JBoss EAP comes with an Apache Kafka connector, and an Advanced Message Queuing Protocol (AMQP) connector. Use the Eclipse MicroProfile Config specification to configure your connectors.
- MicroProfile Reactive Messaging connectors and incorporated layers
MicroProfile Reactive Messaging includes the following connectors:
Kafka connector
The
microprofile-reactive-messaging-kafkalayer incorporates the Kafka connector.AMQP connector
The
microprofile-reactive-messaging-amqplayer incorporates the AMQP connector.
Both the connector layers include the microprofile-reactive-messaging Galleon layer. The microprofile-reactive-messaging layer provides the core MicroProfile Reactive Messaging functionality.
| Layer | Definition |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
2.9.3. The Apache Kafka event streaming platform Copiar enlaceEnlace copiado en el portapapeles!
Apache Kafka is an open source distributed event (data) streaming platform that can publish, subscribe to, store, and process streams of records in real time. It handles event streams from multiple sources and delivers them to multiple consumers, moving large amounts of data from points A to Z and everywhere else, all at the same time. MicroProfile Reactive Messaging uses Apache Kafka to deliver these event records in as few as two microseconds, store them safely in distributed, fault-tolerant clusters, all while making them available across any team-defined zones or geographic regions.