Eclipse MicroProfile
Eclipse MicroProfile is an open standard for Java MicroServices applications: https://microprofile.io/.
- Workshop on microServices with Java and Kubernetes on IBM Cloud
- Deploying microservices to OpenShift by using Kubernetes Operators
MicroProfile Configuration
Standardized configuration mechanisms: https://microprofile.io/project/eclipse/microprofile-config
MicroProfile RestClient
Type-safe JAX-RS client: https://microprofile.io/project/eclipse/microprofile-rest-client
- Make RestClients
@ApplicationScoped
:By default, MicroProfile Rest Clients have a scope of @Dependent. When you inject them into something like a Jakarta RESTful endpoint, they inherit the scope of the Jakarta RESTful class, which is @RequestScoped by default. This will cause a new MicroProfile Rest Client to be created every time, which leads to extra CPU cost and a decent amount of class loading overhead that will slow things down. By making the MicroProfile Rest Client ApplicationScoped, the client is only created once, saving a lot of time.
@ApplicationScoped @Path("/") @RegisterRestClient(configKey="appScopedRestClient") public interface AppScopedRestClient { @GET @Path("/endpoint") @Produces(MediaType.TEXT_PLAIN) public String ping(); } @Path("/mp-restclient-test2") public class MicroProfileRestClientTest2 { @Inject @RestClient private AppScopedRestClient appScopedClient; @GET @Produces(MediaType.TEXT_PLAIN) public String ping() { return appScopedClient.ping(); } }
MicroProfile OpenTracing
Standardized way to trace JAX-RS requests and responses: https://microprofile.io/project/eclipse/microprofile-opentracing
MicroProfile Metrics
Standardized way to expose telemetry data: https://microprofile.io/project/eclipse/microprofile-metrics
MicroProfile OpenAPI
Standardized way to expose API documentation: https://microprofile.io/project/eclipse/microprofile-open-api
MicroProfile Fault Tolerance
Standardized methods for fault tolerance: https://microprofile.io/project/eclipse/microprofile-fault-tolerance
MicroProfile Health
Standardized application health check endpoint: https://microprofile.io/project/eclipse/microprofile-health
MicroShed Testing
MicroShed Testing helps to test MicroProfile applications.
Garbage Collection Thrashing Health Check Example
import javax.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.health.Health;
import org.eclipse.microprofile.health.HealthCheck;
import org.eclipse.microprofile.health.HealthCheckResponse;
@Health
@ApplicationScoped
public class HealthChecker implements HealthCheck
{
public static final double HEALTH_CHECK_GC_MIN_FREE = Double
.parseDouble(System.getProperty("HEALTH_CHECK_GC_MIN_FREE", "0.05"));
public static final int HEALTH_CHECK_GC_MIN_INTERVAL_MS = Integer.getInteger("HEALTH_CHECK_GC_MIN_INTERVAL_SECONDS",
60 * 5) * 1000;
private static long healthCheckGcLastCheck = System.currentTimeMillis();
@Override
public HealthCheckResponse call()
{
if (isGarbageCollectionHealthy())
{
return HealthCheckResponse.named("healthCheck").up().build();
}
else
{
return HealthCheckResponse.named("healthCheck").down().build();
}
}
public static synchronized boolean isGarbageCollectionHealthy()
{
try
{
final long now = System.currentTimeMillis();
final boolean doCheck = now >= healthCheckGcLastCheck + HEALTH_CHECK_GC_MIN_INTERVAL_MS;
healthCheckGcLastCheck = now;
if (doCheck)
{
final int checkHeapBytes = Math.toIntExact(
(long) ((double) Runtime.getRuntime().maxMemory() * HEALTH_CHECK_GC_MIN_FREE));
@SuppressWarnings("unused")
final byte[] blob = new byte[checkHeapBytes];
}
return true;
}
catch (OutOfMemoryError oome)
{
return false;
}
}
}