Java Configuration And Host Public Interface¶
Interface table of contents · Transport Liveness
This document fixes the public interface a Java application uses to configure Mesh, Channel role, handler, and the Framework host. The application declares configuration with the builders below, and the framework checks whether that configuration satisfies the contract when starting the host.
ZLinkCodecRegistrar accepts a parameter-free ASCII type/subtype as a content type.
At startup, the registry removes leading and trailing SP and TAB and converts ASCII
uppercase letters to lowercase. The result is the canonical content type used as the
registry key. A parameter, whitespace inside the value, or a non-ASCII token is rejected
with ZLinkConfigurationException. If the same canonical content type is registered
again, the last registration replaces the earlier one.
A value received from the framework service wire must already be canonical. Another
representation completes with ZLinkFrameworkErrorKind.PROTOCOL_ERROR.
The two-argument addSerializer(contentType, serializer) registers a serializer that
matches every declared message type. The three-argument overload passes the Class<?>
declared at the send call site to its Predicate<Class<?>>. If several registrations
match, the serializer registered later is used; if none matches, the Framework JSON
serializer is used. The runtime instance's concrete subclass doesn't replace the declared
type.
The registry doesn't change after startup. Send-selection results are stored for up to 1,024 declared types, and reaching that limit doesn't evict existing entries. Each type first seen afterward is evaluated against the registration list on every send, and its result isn't stored.
public interface ZLinkFrameworkOptions {
Duration defaultRequestTimeout();
void setDefaultRequestTimeout(Duration timeout);
ZLinkCodecRegistryBuilder codecs();
void addHandlersFromPackageOf(Class<?> markerType);
ZLinkMetadataPolicyBuilder configureMetadata();
void addLocationStore(ZLinkLocationStore store);
void addRelocationStore(ZLinkRelocationStore store);
void setApplicationVersion(long version);
void setMaintenanceWave(String waveId);
ZLinkLocationOptions configureLocations();
ZLinkInboundDispatchOptions configureInboundDispatch();
ZLinkNetworkOptions configureNetwork();
ZLinkMeshNodeBuilder addRouteMesh(String meshName);
ClientServerChannelBuilder addClientServerChannel(String channelName);
FanoutChannelBuilder addFanoutChannel(String channelName);
ZLinkStreamNodeBuilder addStreamNode(String name);
void useFilter(Class<? extends ZLinkHandlerFilter> filterType);
ZLinkDispatchOptions configureDispatch();
ZLinkStreamCompressionBuilder configureStreamCompression();
ZLinkWorkerOptions configureWorkers();
void useVirtualThreadHandlers();
void useHandlerExecutor(Executor executor);
}
public enum ZLinkCoreHwmProfile {
COMPACT,
LOW_LATENCY,
BALANCED,
THROUGHPUT
}
public enum ZLinkApplicationJobQueueProfile {
COMPACT,
LOW_LATENCY,
BALANCED,
THROUGHPUT
}
public interface ZLinkInboundDispatchOptions {
OptionalLong coreHwmMemoryLimitBytes();
void setCoreHwmMemoryLimitBytes(long value);
OptionalLong coreHwmBudgetBytes();
void setCoreHwmBudgetBytes(long value);
ZLinkCoreHwmProfile coreHwmProfile();
void setCoreHwmProfile(ZLinkCoreHwmProfile value);
ZLinkApplicationJobQueueProfile applicationJobQueueProfile();
void setApplicationJobQueueProfile(ZLinkApplicationJobQueueProfile value);
OptionalLong maxQueuedApplicationJobs();
void setMaxQueuedApplicationJobs(long value);
int applicationJobQueuePauseThresholdPercent();
void setApplicationJobQueuePauseThresholdPercent(int value);
int applicationJobQueueResumeThresholdPercent();
void setApplicationJobQueueResumeThresholdPercent(int value);
}
public interface ZLinkLocationOptions {
Duration ownerLeaseRenewInterval();
void setOwnerLeaseRenewInterval(Duration value);
Duration ownerLeaseTtl();
void setOwnerLeaseTtl(Duration value);
Duration pollingInterval();
void setPollingInterval(Duration value);
Duration storeFailureGrace();
void setStoreFailureGrace(Duration value);
Duration ownerLeaseFencingMargin();
void setOwnerLeaseFencingMargin(Duration value);
Duration ownerLeaseRenewTimeout();
void setOwnerLeaseRenewTimeout(Duration value);
Duration routeCacheMaxAge();
void setRouteCacheMaxAge(Duration value);
Duration messageFollowDuration();
void setMessageFollowDuration(Duration value);
Duration sessionRelocationSealTimeout();
void setSessionRelocationSealTimeout(Duration value);
long relocationPayloadChunkLimitBytes();
void setRelocationPayloadChunkLimitBytes(long value);
long relocationInFlightPayloadBudgetBytes();
void setRelocationInFlightPayloadBudgetBytes(long value);
long relocationNodeInFlightPayloadBudgetBytes();
void setRelocationNodeInFlightPayloadBudgetBytes(long value);
Duration relocationCutoverWaitTimeout();
void setRelocationCutoverWaitTimeout(Duration value);
}
public interface ZLinkNetworkOptions {
String bindHost();
void setBindHost(String host);
Optional<String> advertiseHost();
void setAdvertiseHost(String host);
}
public interface ZLinkMeshNodeSocketConfig {
long sendHighWaterMark();
void setSendHighWaterMark(long value);
long receiveHighWaterMark();
void setReceiveHighWaterMark(long value);
long mailboxMessageBudget();
void setMailboxMessageBudget(long value);
long mailboxByteBudget();
void setMailboxByteBudget(long value);
Optional<Duration> receiveTimeout();
void setReceiveTimeout(Duration value);
Optional<Duration> sendTimeout();
void setSendTimeout(Duration value);
}
@FunctionalInterface
public interface ZLinkFrameworkConfigurer {
void configure(ZLinkFrameworkOptions framework);
}
public interface ZLinkMeshNodeBuilder {
ZLinkMeshChannelBuilder channel(String channelName);
ZLinkMeshNodeBuilder listen(String endpoint);
ZLinkMeshNodeBuilder listen();
ZLinkMeshNodeBuilder listen(int port);
ZLinkMeshNodeBuilder setBindHost(String host);
ZLinkMeshNodeBuilder setAdvertiseHost(String host);
ZLinkMeshNodeBuilder setRoutingId(RoutingId routingId);
ZLinkMeshNodeBuilder setRoutingIdPrefix(String prefix);
ZLinkMeshNodeBuilder setPlacementWeight(int weight);
ZLinkMeshNodeBuilder setActorCapacity(int maxActors);
ZLinkMeshNodeBuilder setSpotCapacity(int maxSpots);
ZLinkMeshNodeBuilder setActivationConcurrency(int maxConcurrentActivations);
ZLinkMeshNodeBuilder setInstanceSpotIdleTimeout(Duration timeout);
ZLinkMeshObjectRoleBuilder objects();
ZLinkMeshNodeSocketConfig configureRouterSocket();
ZLinkSpotPublisherConfig configureSpotPublisher();
ZLinkMeshPeerConnections peerConnections();
ZLinkMeshNodeBuilder setDefaultRequestTimeout(Duration timeout);
<THandler, TMessage>
ZLinkMeshNodeBuilder addRouteSendHandler(
Class<THandler> handlerType,
Class<TMessage> messageType);
<THandler, TRequest, TReply>
ZLinkMeshNodeBuilder addRouteRequestHandler(
Class<THandler> handlerType,
Class<TRequest> requestType,
Class<TReply> replyType);
}
public interface ZLinkMeshObjectRoleBuilder {
ZLinkMeshObjectClientBuilder client();
ZLinkMeshObjectServerBuilder server();
}
public interface ZLinkMeshObjectClientBuilder {}
public interface ZLinkMeshObjectServerBuilder {
ZLinkMeshObjectServerBuilder addEntrySpot(Class<? extends ZLinkEntrySpot> entrySpotClass);
<TSpot extends ZLinkSpot> ZLinkMeshObjectServerBuilder addSpotFactory(
String spotType, Class<TSpot> spotClass,
Consumer<ZLinkUserSpotFactoryBuilder<TSpot>> configure);
<TSpot extends ZLinkInstanceSpot> ZLinkMeshObjectServerBuilder addInstanceSpotFactory(
String instanceSpotType, Class<TSpot> spotClass,
Consumer<ZLinkInstanceSpotFactoryBuilder<TSpot>> configure);
<TActor extends ZLinkActor> ZLinkMeshObjectServerBuilder addActorFactory(
String actorType,
Class<TActor> actorClass,
Class<? extends ZLinkActorFactory> factoryClass,
Consumer<ZLinkActorFactoryBuilder<TActor>> configure);
}
public enum ZLinkUserSpotExecutionMode {
SPOT_WIDE(0), PER_ACTOR(1);
private final int value;
ZLinkUserSpotExecutionMode(int value) { this.value = value; }
public int value() { return value; }
}
public enum ZLinkSpotRelocationCoordinationMode {
FRAMEWORK_MANAGED(0), APPLICATION_SIGNALED(1);
private final int value;
ZLinkSpotRelocationCoordinationMode(int value) { this.value = value; }
public int value() { return value; }
}
public interface ZLinkActorFactoryBuilder<TActor extends ZLinkActor> {
void disableRelocation();
void recreateOnRelocation();
void preserveStateWith(
Class<? extends ZLinkActorRelocationAdapter<TActor>> adapterClass);
}
public interface ZLinkUserSpotFactoryBuilder<TSpot extends ZLinkSpot> {
ZLinkUserSpotFactoryBuilder<TSpot> stableTypeLimit(int limit);
ZLinkUserSpotFactoryBuilder<TSpot> executionMode(ZLinkUserSpotExecutionMode mode);
ZLinkUserSpotFactoryBuilder<TSpot> relocationCoordinationMode(
ZLinkSpotRelocationCoordinationMode mode);
void disableRelocation();
void recreateOnRelocation();
void preserveStateWith(
Class<? extends ZLinkSpotRelocationAdapter<TSpot>> adapterClass);
}
public interface ZLinkInstanceSpotFactoryBuilder<TSpot extends ZLinkInstanceSpot> {
ZLinkInstanceSpotFactoryBuilder<TSpot> stableTypeLimit(int limit);
void disableRelocation();
void recreateOnRelocation();
void preserveStateWith(
Class<? extends ZLinkSpotRelocationAdapter<TSpot>> adapterClass);
}
public interface FanoutChannelBuilder {
FanoutChannelBuilder enablePublisher(String endpoint);
FanoutChannelBuilder enablePublisher();
FanoutChannelBuilder enablePublisher(int port);
FanoutChannelBuilder setBindHost(String host);
FanoutChannelBuilder setAdvertiseHost(String host);
FanoutChannelBuilder setRoutingId(RoutingId publisherRoutingId);
FanoutChannelBuilder setRoutingIdPrefix(String prefix);
FanoutChannelBuilder enableSubscriber();
FanoutChannelBuilder connect(String endpoint);
ZLinkEndpointConnections subscriberConnections();
FanoutChannelBuilder addHandlerGroup(String groupName);
}
The coreHwmMemoryLimitBytes, coreHwmBudgetBytes, and coreHwmProfile members of the
ZLinkInboundDispatchOptions returned by configureInboundDispatch() are forwarded to Core. The Java
binding forwards a positive finite Runtime.maxMemory() runtime memory
hint. Core and job-queue profiles are independent enums, both defaulting to BALANCED.
Manual job cap is 1..2,147,483,647; omission uses the common startup CPU snapshot and
32/64/128/256 coefficients. Pressure thresholds default to pause 80 and resume 60; pause
is an integer in 1..100, resume is an integer in 0..99, and resume must be less than pause.
Violating these bounds or their ordering, or overflowing capacity, fails before bind, and runtime
does not recompute the result. The application
listener's default maxMessageSize() is
16_777_216L bytes.
configureNetwork() returns the default host the process's RouteMesh,
ClientServer, classic fanout, and stream listener use. The default
BindHost is 127.0.0.1. Calling per-listener setBindHost(...) and
setAdvertiseHost(...) overrides the root default only for that
listener. When using port 0, the framework combines the port
confirmed after bind with AdvertiseHost and records it in the discovery
descriptor. Since a stream listener isn't a discovery target, it uses
the advertised endpoint computed with the same rule for operational
information, and doesn't automatically publish the remote connector
endpoint.
The following example is a minimal form registering, on different host
configurations, a node that only starts calls and a node that processes
requests on the same RouteMesh. clientOptions and serverOptions are
each a separate host's ZLinkFrameworkOptions. The names and weight in
the example are illustrative values, not contract defaults.
clientOptions.addRouteMesh("orders")
.channel("checkout")
.client(); // this node starts checkout calls but isn't included as a server candidate.
serverOptions.addRouteMesh("orders")
.channel("checkout")
.server()
.setWeight(100)
.addRequestHandler(
CheckoutHandler.class,
CheckoutRequest.class,
CheckoutReply.class); // registers this node as a checkout request processing candidate.
An automatic RouteMesh compares RID in canonical byte order, and only the MeshNode with the smaller RID connects to the counterpart endpoint. A manual topology can connect from one or both sides depending on application endpoint configuration. If bidirectional connection or automatic discovery contention/a stale snapshot creates a duplicate candidate, handshake and admission check the same RID and lifecycle generation and keep only one in ready state.
A peer connection isn't needed only when both MeshNodes' object role is
Client and neither has RouteMesh Channel Server membership. The same
applies when only Channel Client membership is registered. If either
side has Channel Server membership, a connection is made and liveness is
kept even if weight is 0. ClientServer and classic fanout
registration are separate physical topologies, so they aren't included
in this judgment.
ClientServer can use manual endpoint and location store
automatic discovery
together. If the two sources point to the same Server RID and
lifecycle generation,
the connection intent and ready target are merged into one. In both
automatic and manual, only Client connects to server — Server doesn't
look for a client endpoint or start an outbound connect. Client and
Server can each be registered once on the same ChannelName, sharing one
ClientServer topology through separate registrations under the
(ChannelName, Role) key. Registering the same role twice fails
startup, and the RouteMesh ChannelName
conflict rule is kept. A local Server, after listener and service
admission, is also selected under the same readiness/weight/
drain conditions as a remote Server, without local priority or calling a
direct handler.
In fanout, the Publisher only publishes a descriptor and doesn't start an outbound connect. Only the subscriber connects to the publisher endpoint, and an automatic subscriber creates one connection intent per Publisher RID and lifecycle generation. Configuring both an automatic subscriber and a manual subscriber endpoint on one ChannelName fails startup.
Omitting object role means None. client() only provides global
object operations and doesn't become a placement target, and server()
provides Client capability plus Entry Spot/factory registration. Client
and Server require a
Location Store. The
Actor/User Spot/Instance Spot
factory must take a stable type
and configure callback, and there's no overload that omits relocation
behavior selection.
A RouteMesh Channel Server can also be registered on an Object Client. An application Node direct handler can't be registered, and specifying an Object Client RID as a Node direct target ends as not-found without switching to a different RID.
The configure callback must call exactly one of disableRelocation(),
recreateOnRelocation(), preserveStateWith(...). Omitting it or
calling more than one is a startup configuration error before socket
bind. The Actor builder only takes a ZLinkActorRelocationAdapter of
the same Actor type, and the User/Instance Spot builder only takes a
ZLinkSpotRelocationAdapter of the same Spot type. There is no separate
registration API.
The framework runs the configure callback synchronously exactly once inside the registration call. Calling the retained builder again after the callback returns is a configuration error. If the callback throws, that factory isn't registered and the same exception is propagated to the caller.
ZLinkUserSpotExecutionMode.PER_ACTOR only allows
recreateOnRelocation(). Registering a different policy together is a
startup configuration error. A PerActor Spot is a stateless execution
shell, and the Actor policy and adapter each handle Actor state.
relocationCoordinationMode's default is FRAMEWORK_MANAGED.
APPLICATION_SIGNALED is only allowed with SPOT_WIDE, and registering
it together with PER_ACTOR is a startup configuration error before
socket bind. Since the Spot callback is a default no-op method, an
application override isn't required.
Node placement weight is 0..10000, defaulting to 100. An out-of-range
value is a configuration error in both startup config and runtime
change. Node capacity defaults to 10,000 active and 128 pending. If a
per-type limit is omitted, it shares the node limit. An explicit value
must be 1..Integer.MAX_VALUE, and a value smaller than the node limit
applies. stableTypeLimit(0) and a negative value are a configuration
error during callback execution. The capacity filter is applied before
weight. enableActorDispatch() takes no argument, and the global
ActorId resolves the Mesh.
The Object Server's Entry Spot ID has the format
<prefix>-entry-<lowercase-canonical-uuid-v4> using the MeshNode
diagnostic prefix, with a UUID v4 generated separately from the
MeshNode. The framework-internal descriptor's entrySpotId provides the
mapping for the same lifecycle. If the global Spot ID conflicts
with an active owner, startup fails immediately with a configuration
exception instead of retrying with a new UUID. If a caller-specified
User/Instance Spot ID matches this reserved format, it's rejected with
INVALID_OPERATION before starting the Store and factory.
The Location provider provides, through ZLinkLocationStore, read of
the framework's opaque record, version-conditional atomic batch, and
bounded snapshot scan. A separate per-domain Store instance isn't
registered on the host. A host that selected recreateOnRelocation() or
preserveStateWith(...) even once, or registered even one Instance Spot
factory, registers exactly one ZLinkRelocationStore. A host with no
Instance Spot factory, where every factory selected
disableRelocation() and only uses same-node joins, can omit the
Relocation Store. A missing or duplicate Store registration is a startup
configuration error before socket bind. An API that registers Location
and Relocation capability together, and a Redis-specific registration
helper, aren't provided.
ApplicationVersion is a deployment sequence number in range
0..Long.MAX_VALUE. A negative value is rejected in startup validation.
The 5-second periodic probe independent of application traffic, and the
15-second matching-ACK deadline on the same current connection, are the
JVM service runtime's fixed liveness profile. A different inbound frame
doesn't satisfy the deadline.
This value isn't exposed as a public option per Channel/handler/peer.
The Location owner lease option is a separate store contract and doesn't
substitute for transport liveness.
ZLinkMeshNodeSocketConfig doesn't provide a Framework-level message-size
setting for RouteMesh SS. A sender or receiver doesn't reject a message because
of a Framework-level complete-message cap. Transport and service-wire
representation bounds, HWM, and mailbox budgets remain separate resource and
wire guards.
mailboxMessageBudget and mailboxByteBudget are the caps on message
count and byte sum for the per-owner application mailbox. Byte
accounting doesn't count only payload size — it adds payload size +
metadata size + a fixed per-job cost. Even if payload is empty, one job
isn't 0 bytes, and even for a large payload, the fixed cost is still
added. If the sum exceeds the long representable range, it's pinned to
Long.MAX_VALUE and that submit is rejected. The accounting rule is
owned by
Framework API §8.2.
Both values are only set before startup. 0 isn't unlimited — it
selects the Framework profile's finite default. A negative value is a
startup configuration error. A Logical Multicast local target also
judges admission using this capacity limit.
setInstanceSpotIdleTimeout(...) is the reference time for cleaning up
an idle Instance Spot. The default is Duration.ZERO, and
Duration.ZERO means no cleanup. The allowed range is Duration.ZERO
and positive values — null and a negative value are startup
configuration errors. The value is fixed before the MeshNode lifecycle
starts, and a runtime setter isn't provided. It's a separate setting
from ZLinkWorkerOptions.idleTimeout(...), and they don't inherit each
other's value. Only Instance Spot is a cleanup target — Entry Spot and
User Spot aren't affected by this setting. The idle judgment condition,
the delivery of ZLinkSpotCloseReason.IDLE_EVICTED, and the
cold-activation rule after cleanup are owned by
Spot Model §6.2.
Automatic RID has the format prefix-<lowercase-canonical-uuid-v4>.
UUID v4 is represented as a lowercase canonical string in 8-4-4-4-12
digit groups. Prefix is ASCII [A-Za-z0-9._-] 1..64 characters, and on
conflict with an active owner, it
fails immediately with ROUTING_ID_CONFLICT instead of retrying with a
new UUID. A fixed RID is allowed in an automatic discovery topology and on a MeshNode that has an
object role. Implementation and test scenarios sometimes need to name a specific peer, and an
auto-assigned UUID cannot be named. When a node using a fixed RID restarts and collides with the
previous active owner claim, the same rule as an automatic RID applies — it does not retry with a
new value but fails immediately with a conflict, and the restart succeeds once the previous owner
lease expires. Slot count, allocation group, and a public
allocation provider aren't provided.
The fully encoded MeshNode descriptor the framework builds from every registration must be at most 1 MiB. Spot type and object capability collection are each at most 1024. The relocation adapter class and opaque application bytes aren't published in the peer descriptor. The runtime validates the completed descriptor all at once before socket bind. Exceeding the bound fails startup — it doesn't truncate/split the collection or publish part of the descriptor.
Public Member javap Inventory¶
The declarations below fix this category's Java public types and
members in the binary signature format javap prints.
public interface systems.zlink.framework.spring.ZLinkFrameworkConfigurer {
public abstract void configure(systems.zlink.framework.configuration.ZLinkFrameworkOptions);
}
public interface systems.zlink.framework.configuration.ZLinkNetworkOptions {
public abstract java.lang.String bindHost();
public abstract void setBindHost(java.lang.String);
public abstract java.util.Optional<java.lang.String> advertiseHost();
public abstract void setAdvertiseHost(java.lang.String);
}
public interface systems.zlink.framework.configuration.FanoutChannelBuilder {
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder enablePublisher(java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder enablePublisher();
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder enablePublisher(int);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder setBindHost(java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder setAdvertiseHost(java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder setRoutingId(systems.zlink.contracts.core.RoutingId);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder setRoutingIdPrefix(java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder enableSubscriber();
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder connect(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkEndpointConnections subscriberConnections();
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder addHandlerGroup(java.lang.String);
public abstract void addPublishHandler(java.lang.Class<?>, java.lang.Class<?>);
public abstract void addPublishHandler(java.lang.Class<?>, java.lang.Class<?>, java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder addPublishHandler(java.lang.Class<?>);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder addPublishHandler(java.lang.Class<?>, java.lang.String);
}
public interface systems.zlink.framework.configuration.ZLinkCodecExtension {
public abstract void register(systems.zlink.framework.configuration.ZLinkCodecRegistrar);
}
public interface systems.zlink.framework.configuration.ZLinkCodecRegistrar {
public abstract void addSerializer(java.lang.String, systems.zlink.framework.ZLinkMessageSerializer);
public abstract void addSerializer(java.lang.String, systems.zlink.framework.ZLinkMessageSerializer, java.util.function.Predicate<java.lang.Class<?>>);
public abstract void addStreamCodec(java.lang.String, systems.zlink.framework.streams.ZLinkStreamCodec);
}
public interface systems.zlink.framework.configuration.ZLinkCodecRegistryBuilder {
public abstract void use(systems.zlink.framework.configuration.ZLinkCodecExtension);
}
public interface systems.zlink.framework.configuration.ZLinkDiagnosticsOptions {
public abstract systems.zlink.framework.configuration.ZLinkMessageFlowLogMode messageFlow();
public abstract double sampleRate();
public abstract boolean includeMessageSizes();
}
public final class systems.zlink.framework.configuration.ZLinkCoreHwmProfile extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkCoreHwmProfile> {
public static final systems.zlink.framework.configuration.ZLinkCoreHwmProfile COMPACT;
public static final systems.zlink.framework.configuration.ZLinkCoreHwmProfile LOW_LATENCY;
public static final systems.zlink.framework.configuration.ZLinkCoreHwmProfile BALANCED;
public static final systems.zlink.framework.configuration.ZLinkCoreHwmProfile THROUGHPUT;
public static systems.zlink.framework.configuration.ZLinkCoreHwmProfile[] values();
public static systems.zlink.framework.configuration.ZLinkCoreHwmProfile valueOf(java.lang.String);
}
public final class systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile> {
public static final systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile COMPACT;
public static final systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile LOW_LATENCY;
public static final systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile BALANCED;
public static final systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile THROUGHPUT;
public static systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile[] values();
public static systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile valueOf(java.lang.String);
}
public interface systems.zlink.framework.configuration.ZLinkDispatchOptions {
public abstract systems.zlink.framework.configuration.ZLinkUnhandledDispatchOptions unhandled();
public abstract systems.zlink.framework.configuration.ZLinkDiagnosticsOptions diagnostics();
public abstract systems.zlink.framework.configuration.ZLinkDispatchOptions messageFlow(systems.zlink.framework.configuration.ZLinkMessageFlowLogMode);
public abstract systems.zlink.framework.configuration.ZLinkDispatchOptions traceSampleRate(double);
public abstract systems.zlink.framework.configuration.ZLinkDispatchOptions includeMessageSizes(boolean);
}
public interface systems.zlink.framework.configuration.ZLinkInboundDispatchOptions {
public abstract java.util.OptionalLong coreHwmMemoryLimitBytes();
public abstract void setCoreHwmMemoryLimitBytes(long);
public abstract java.util.OptionalLong coreHwmBudgetBytes();
public abstract void setCoreHwmBudgetBytes(long);
public abstract systems.zlink.framework.configuration.ZLinkCoreHwmProfile coreHwmProfile();
public abstract void setCoreHwmProfile(systems.zlink.framework.configuration.ZLinkCoreHwmProfile);
public abstract systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile applicationJobQueueProfile();
public abstract void setApplicationJobQueueProfile(systems.zlink.framework.configuration.ZLinkApplicationJobQueueProfile);
public abstract java.util.OptionalLong maxQueuedApplicationJobs();
public abstract void setMaxQueuedApplicationJobs(long);
public abstract int applicationJobQueuePauseThresholdPercent();
public abstract void setApplicationJobQueuePauseThresholdPercent(int);
public abstract int applicationJobQueueResumeThresholdPercent();
public abstract void setApplicationJobQueueResumeThresholdPercent(int);
}
public interface systems.zlink.framework.configuration.ZLinkEndpointConnections {
public abstract void connect(java.lang.String);
public abstract void disconnect(java.lang.String);
public abstract java.util.List<java.lang.String> listConnections();
}
public interface systems.zlink.framework.configuration.ZLinkMeshNodeSocketConfig {
public abstract long sendHighWaterMark();
public abstract void setSendHighWaterMark(long);
public abstract long receiveHighWaterMark();
public abstract void setReceiveHighWaterMark(long);
public abstract long mailboxMessageBudget();
public abstract void setMailboxMessageBudget(long);
public abstract long mailboxByteBudget();
public abstract void setMailboxByteBudget(long);
public abstract java.util.Optional<java.time.Duration> receiveTimeout();
public abstract void setReceiveTimeout(java.time.Duration);
public abstract java.util.Optional<java.time.Duration> sendTimeout();
public abstract void setSendTimeout(java.time.Duration);
}
public final class systems.zlink.framework.configuration.ZLinkMeshPeerConnection extends java.lang.Record {
public systems.zlink.framework.configuration.ZLinkMeshPeerConnection(java.lang.String, java.util.Optional<systems.zlink.contracts.core.RoutingId>);
public final java.lang.String toString();
public final int hashCode();
public final boolean equals(java.lang.Object);
public java.lang.String endpoint();
public java.util.Optional<systems.zlink.contracts.core.RoutingId> expectedRoutingId();
}
public interface systems.zlink.framework.configuration.ZLinkMeshPeerConnections {
public abstract void connect(java.lang.String);
public abstract void connect(systems.zlink.contracts.core.RoutingId, java.lang.String);
public abstract void disconnect(java.lang.String);
public abstract java.util.List<systems.zlink.framework.configuration.ZLinkMeshPeerConnection> listConnections();
}
public interface systems.zlink.framework.configuration.ZLinkMessageFlowControl {
public abstract void setMessageFlowMode(systems.zlink.framework.configuration.ZLinkMessageFlowLogMode);
public abstract systems.zlink.framework.configuration.ZLinkMessageFlowLogMode messageFlowMode();
}
public final class systems.zlink.framework.configuration.ZLinkMessageFlowLogMode extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkMessageFlowLogMode> {
public static final systems.zlink.framework.configuration.ZLinkMessageFlowLogMode OFF;
public static final systems.zlink.framework.configuration.ZLinkMessageFlowLogMode ERRORS;
public static final systems.zlink.framework.configuration.ZLinkMessageFlowLogMode NORMAL;
public static final systems.zlink.framework.configuration.ZLinkMessageFlowLogMode DETAILED;
public static systems.zlink.framework.configuration.ZLinkMessageFlowLogMode[] values();
public static systems.zlink.framework.configuration.ZLinkMessageFlowLogMode valueOf(java.lang.String);
public int value();
}
public interface systems.zlink.framework.configuration.ZLinkMetadataPolicyBuilder {
public abstract systems.zlink.framework.configuration.ZLinkMetadataPolicyBuilder allowSessionToActor(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMetadataPolicyBuilder allowActorToSession(java.lang.String);
}
public interface systems.zlink.framework.configuration.ZLinkSpotPublisherConfig {
public abstract long sendHighWaterMark();
public abstract void setSendHighWaterMark(long);
public abstract java.util.Optional<java.time.Duration> sendTimeout();
public abstract void setSendTimeout(java.time.Duration);
public abstract java.util.Optional<java.time.Duration> linger();
public abstract void setLinger(java.time.Duration);
}
public interface systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder {
public abstract systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder useDefault();
public abstract systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder useLz4();
public abstract systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder use(systems.zlink.framework.streams.ZLinkStreamCompressionCodec);
public abstract systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder disable();
}
public interface systems.zlink.framework.configuration.ZLinkStreamNodeBuilder {
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder bind(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder bind();
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder bind(int);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder setBindHost(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder setAdvertiseHost(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkStreamSocketConfig configureSocket();
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder setTlsServer(java.lang.String, java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder setTlsServer(java.lang.String, java.lang.String, boolean);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder registerSession(java.lang.Class<? extends systems.zlink.framework.streams.ZLinkSession>);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder enableActorDispatch();
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder addSessionPacketHandler(java.lang.Class<?>);
}
public interface systems.zlink.framework.configuration.ZLinkStreamSocketConfig {
public abstract long maxMessageSize();
public abstract void setMaxMessageSize(long);
}
public final class systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction> {
public static final systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction REPLY_ERROR;
public static final systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction LOG_AND_DROP;
public static final systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction DROP;
public static final systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction THROW;
public static systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction[] values();
public static systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction valueOf(java.lang.String);
public int value();
}
public interface systems.zlink.framework.configuration.ZLinkUnhandledDispatchOptions {
public abstract void setRequest(systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction);
public abstract void setSend(systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction);
public abstract void setPublish(systems.zlink.framework.configuration.ZLinkUnhandledDispatchAction);
public abstract void setSendLogLevel(systems.zlink.framework.configuration.ZLinkLogLevel);
public abstract void setPublishLogLevel(systems.zlink.framework.configuration.ZLinkLogLevel);
}
public interface systems.zlink.framework.configuration.ZLinkWorkerOptions {
public abstract systems.zlink.framework.configuration.ZLinkWorkerOptions minThreads(int);
public abstract systems.zlink.framework.configuration.ZLinkWorkerOptions maxThreads(int);
public abstract systems.zlink.framework.configuration.ZLinkWorkerOptions idleTimeout(java.time.Duration);
public abstract systems.zlink.framework.configuration.ZLinkWorkerOptions maxQueueLength(int);
}
The four ZLinkMessageFlowLogMode values respectively mean disabled
diagnostics, errors only, key transitions, and detailed diagnostics. The
startup diagnostics level defaults to ERRORS when omitted. The Framework
writes structured records to the standard logger/trace/metric
providers configured by the application. The diagnostics members of dispatch configuration only provide
level, sampling rate, and whether to include message size; it doesn't take a
file path, label, exporter lifecycle, or provider sink. A message-flow observer callback,
runtime error sink, and raw event DTO aren't the public contract. A provider
call failure does not change the original message operation's terminal result
and is isolated as separate diagnostics.
ZLinkStreamNodeBuilder.configureSocket().setMaxMessageSize(...) defaults
to 64 KiB. This setting is used only when a StreamNode's Core STREAM
inbound path checks a complete client-to-server message. The size is header
bytes plus payload bytes, excluding the 6-byte prefix. 0 maps to Core -1,
so Framework adds no limit; a negative value is a startup configuration
error. A message over the limit is never partly delivered to the handler. The
server records EMSGSIZE and a diagnostic trace, then closes the connection.
The raw client observes the close without a separate wire error code. The
Framework limit doesn't apply to server-to-client outbound messages, and the
setting isn't added to ClientServer or RouteMesh SS.
Remaining Configuration Public Member javap Inventory¶
The declarations below fix, in the binary signature format javap
prints, the application-facing configuration types not included in the
inventory above.
public interface systems.zlink.framework.configuration.ZLinkFrameworkOptions {
public abstract java.time.Duration defaultRequestTimeout();
public abstract void setDefaultRequestTimeout(java.time.Duration);
public abstract systems.zlink.framework.configuration.ZLinkCodecRegistryBuilder codecs();
public abstract void addHandlersFromPackageOf(java.lang.Class<?>);
public abstract systems.zlink.framework.configuration.ZLinkMetadataPolicyBuilder configureMetadata();
public abstract void addRelocationStore(systems.zlink.framework.locations.ZLinkRelocationStore);
public abstract void setApplicationVersion(long);
public abstract void setMaintenanceWave(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder addRouteMesh(java.lang.String);
public abstract systems.zlink.framework.configuration.ClientServerChannelBuilder addClientServerChannel(java.lang.String);
public abstract systems.zlink.framework.configuration.FanoutChannelBuilder addFanoutChannel(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkStreamNodeBuilder addStreamNode(java.lang.String);
public abstract void addLocationStore(systems.zlink.framework.locations.ZLinkLocationStore);
public abstract systems.zlink.framework.locations.ZLinkLocationOptions configureLocations();
public abstract systems.zlink.framework.configuration.ZLinkInboundDispatchOptions configureInboundDispatch();
public abstract systems.zlink.framework.configuration.ZLinkNetworkOptions configureNetwork();
public abstract void useFilter(java.lang.Class<? extends systems.zlink.framework.ZLinkHandlerFilter>);
public abstract systems.zlink.framework.configuration.ZLinkDispatchOptions configureDispatch();
public abstract systems.zlink.framework.configuration.ZLinkStreamCompressionBuilder configureStreamCompression();
public abstract systems.zlink.framework.configuration.ZLinkWorkerOptions configureWorkers();
public abstract void useVirtualThreadHandlers();
public abstract void useHandlerExecutor(java.util.concurrent.Executor);
}
public interface systems.zlink.framework.locations.ZLinkLocationOptions {
public abstract java.time.Duration ownerLeaseRenewInterval();
public abstract void setOwnerLeaseRenewInterval(java.time.Duration);
public abstract java.time.Duration ownerLeaseTtl();
public abstract void setOwnerLeaseTtl(java.time.Duration);
public abstract java.time.Duration pollingInterval();
public abstract void setPollingInterval(java.time.Duration);
public abstract java.time.Duration storeFailureGrace();
public abstract void setStoreFailureGrace(java.time.Duration);
public abstract java.time.Duration ownerLeaseFencingMargin();
public abstract void setOwnerLeaseFencingMargin(java.time.Duration);
public abstract java.time.Duration ownerLeaseRenewTimeout();
public abstract void setOwnerLeaseRenewTimeout(java.time.Duration);
public abstract java.time.Duration routeCacheMaxAge();
public abstract void setRouteCacheMaxAge(java.time.Duration);
public abstract java.time.Duration messageFollowDuration();
public abstract void setMessageFollowDuration(java.time.Duration);
public abstract java.time.Duration sessionRelocationSealTimeout();
public abstract void setSessionRelocationSealTimeout(java.time.Duration);
public abstract long relocationPayloadChunkLimitBytes();
public abstract void setRelocationPayloadChunkLimitBytes(long);
public abstract long relocationInFlightPayloadBudgetBytes();
public abstract void setRelocationInFlightPayloadBudgetBytes(long);
public abstract long relocationNodeInFlightPayloadBudgetBytes();
public abstract void setRelocationNodeInFlightPayloadBudgetBytes(long);
public abstract java.time.Duration relocationCutoverWaitTimeout();
public abstract void setRelocationCutoverWaitTimeout(java.time.Duration);
}
public final class systems.zlink.framework.configuration.ZLinkLogLevel extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkLogLevel> {
public static final systems.zlink.framework.configuration.ZLinkLogLevel TRACE;
public static final systems.zlink.framework.configuration.ZLinkLogLevel DEBUG;
public static final systems.zlink.framework.configuration.ZLinkLogLevel INFO;
public static final systems.zlink.framework.configuration.ZLinkLogLevel WARN;
public static final systems.zlink.framework.configuration.ZLinkLogLevel ERROR;
public static systems.zlink.framework.configuration.ZLinkLogLevel[] values();
public static systems.zlink.framework.configuration.ZLinkLogLevel valueOf(java.lang.String);
public int value();
}
public interface systems.zlink.framework.configuration.ZLinkMeshNodeBuilder {
public abstract systems.zlink.framework.configuration.ZLinkMeshChannelBuilder channel(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder listen(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder listen();
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder listen(int);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setBindHost(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setAdvertiseHost(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setRoutingId(systems.zlink.contracts.core.RoutingId);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setRoutingIdPrefix(java.lang.String);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setPlacementWeight(int);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setActorCapacity(int);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setSpotCapacity(int);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setActivationConcurrency(int);
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setInstanceSpotIdleTimeout(java.time.Duration);
public abstract systems.zlink.framework.configuration.ZLinkMeshObjectRoleBuilder objects();
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeSocketConfig configureRouterSocket();
public abstract systems.zlink.framework.configuration.ZLinkSpotPublisherConfig configureSpotPublisher();
public abstract systems.zlink.framework.configuration.ZLinkMeshPeerConnections peerConnections();
public abstract systems.zlink.framework.configuration.ZLinkMeshNodeBuilder setDefaultRequestTimeout(java.time.Duration);
public abstract <THandler, TMessage> systems.zlink.framework.configuration.ZLinkMeshNodeBuilder addRouteSendHandler(java.lang.Class<THandler>, java.lang.Class<TMessage>);
public abstract <THandler, TRequest, TReply> systems.zlink.framework.configuration.ZLinkMeshNodeBuilder addRouteRequestHandler(java.lang.Class<THandler>, java.lang.Class<TRequest>, java.lang.Class<TReply>);
}
public interface systems.zlink.framework.configuration.ZLinkMeshObjectRoleBuilder {
public abstract systems.zlink.framework.configuration.ZLinkMeshObjectClientBuilder client();
public abstract systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder server();
}
public interface systems.zlink.framework.configuration.ZLinkMeshObjectClientBuilder {
}
public interface systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder {
public abstract systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder addEntrySpot(java.lang.Class<? extends systems.zlink.framework.spots.ZLinkEntrySpot<?>>);
public abstract <TSpot extends systems.zlink.framework.spots.ZLinkSpot<?>> systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder addSpotFactory(java.lang.String, java.lang.Class<TSpot>, java.util.function.Consumer<systems.zlink.framework.configuration.ZLinkUserSpotFactoryBuilder<TSpot>>);
public abstract <TSpot extends systems.zlink.framework.spots.ZLinkInstanceSpot> systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder addInstanceSpotFactory(java.lang.String, java.lang.Class<TSpot>, java.util.function.Consumer<systems.zlink.framework.configuration.ZLinkInstanceSpotFactoryBuilder<TSpot>>);
public abstract <TActor extends systems.zlink.framework.actors.ZLinkActor> systems.zlink.framework.configuration.ZLinkMeshObjectServerBuilder addActorFactory(java.lang.String, java.lang.Class<TActor>, java.lang.Class<? extends systems.zlink.framework.actors.ZLinkActorFactory>, java.util.function.Consumer<systems.zlink.framework.configuration.ZLinkActorFactoryBuilder<TActor>>);
}
public final class systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode> {
public static final systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode SPOT_WIDE;
public static final systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode PER_ACTOR;
public static systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode[] values();
public static systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode valueOf(java.lang.String);
public int value();
}
public final class systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode extends java.lang.Enum<systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode> {
public static final systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode FRAMEWORK_MANAGED;
public static final systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode APPLICATION_SIGNALED;
public static systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode[] values();
public static systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode valueOf(java.lang.String);
public int value();
}
public interface systems.zlink.framework.configuration.ZLinkActorFactoryBuilder<TActor extends systems.zlink.framework.actors.ZLinkActor> {
public abstract void disableRelocation();
public abstract void recreateOnRelocation();
public abstract void preserveStateWith(java.lang.Class<? extends systems.zlink.framework.actors.ZLinkActorRelocationAdapter<TActor>>);
}
public interface systems.zlink.framework.configuration.ZLinkUserSpotFactoryBuilder<TSpot extends systems.zlink.framework.spots.ZLinkSpot<?>> {
public abstract systems.zlink.framework.configuration.ZLinkUserSpotFactoryBuilder<TSpot> stableTypeLimit(int);
public abstract systems.zlink.framework.configuration.ZLinkUserSpotFactoryBuilder<TSpot> executionMode(systems.zlink.framework.configuration.ZLinkUserSpotExecutionMode);
public abstract systems.zlink.framework.configuration.ZLinkUserSpotFactoryBuilder<TSpot> relocationCoordinationMode(systems.zlink.framework.configuration.ZLinkSpotRelocationCoordinationMode);
public abstract void disableRelocation();
public abstract void recreateOnRelocation();
public abstract void preserveStateWith(java.lang.Class<? extends systems.zlink.framework.spots.ZLinkSpotRelocationAdapter<TSpot>>);
}
public interface systems.zlink.framework.configuration.ZLinkInstanceSpotFactoryBuilder<TSpot extends systems.zlink.framework.spots.ZLinkInstanceSpot> {
public abstract systems.zlink.framework.configuration.ZLinkInstanceSpotFactoryBuilder<TSpot> stableTypeLimit(int);
public abstract void disableRelocation();
public abstract void recreateOnRelocation();
public abstract void preserveStateWith(java.lang.Class<? extends systems.zlink.framework.spots.ZLinkSpotRelocationAdapter<TSpot>>);
}
public interface systems.zlink.framework.spring.EnableZLinkFramework extends java.lang.annotation.Annotation {
}
public interface systems.zlink.framework.spring.ZLinkMetricsCustomizer {
public abstract void customize(io.micrometer.core.instrument.MeterRegistry);
}
Spring Bean Contract¶
The Spring starter provides ZLinkFrameworkRuntime, ZLinkRouteMeshRuntime,
ZLinkClientServerRuntime, and ZLinkFanoutRuntime as singleton beans.
The three topology beans register exactly the object the runtime's
corresponding accessor returns, so they don't create a new adapter or
separate runtime. The public client and remaining runtime service beans
also use the object owned by the same ZLinkFrameworkRuntime.
Service sockets, discovery loops, and application workers aren't started
while creating the bean. SmartLifecycle.start() calls the same
runtime's start exactly once. The contract guaranteed to the application
is the public bean's type, singleton lifetime, and reference identity.
The auto-configuration class, bean factory methods, lifecycle adapters,
and their constructors are implementation details, not the application
public signature.
Core's internal bootstrap package is qualified-exported only to the
starter module. Compilation must fail if an application calls
ZLinkFrameworkRuntime.start(...) from the module path or classpath. A
contract test calls the bootstrap from the actual module path and
confirms the runtime reaches SERVING.
The contract test resolves each of the four runtime beans twice to
confirm they're singletons. It then compares the three topology beans
with assertSame against the return values of
runtime.routeMeshRuntime(), runtime.clientServerRuntime(), and
runtime.fanoutRuntime(). The lifecycle regression test confirms the
service socket isn't started before or after bean creation, and that
start and shutdown are each delivered once to the same
ZLinkFrameworkRuntime.
Inbound Queue And Session Seal Options¶
The Java binding forwards a positive finite Runtime.maxMemory() as Core's runtime memory
hint. Core and job-queue profiles are independent enums, both defaulting to BALANCED.
Manual job cap is 1..2,147,483,647; omission uses the common startup CPU snapshot and
32/64/128/256 coefficients. Range violation and overflow fail before bind, and runtime does
not recompute the result.
sessionRelocationSealTimeout is a startup-only positive Duration defaulting to three
seconds; a value not finitely representable in milliseconds also fails before bind.
relocationPayloadChunkLimitBytes is the maximum size in bytes of one encoded chunk of a
relocation payload, defaulting to 256 KiB. Setting it above the frame limit the
transport negotiated is a startup configuration error before socket bind.
relocationInFlightPayloadBudgetBytes caps the sum of relocation chunk bytes concurrently
in flight per peer connection, defaulting to 16 MiB; 0 disables the budget.
relocationNodeInFlightPayloadBudgetBytes applies the same accounting rule to the
node-wide sum and defaults to 0, meaning not applied. relocationCutoverWaitTimeout
is both the time the target waits for cutover and the time the source keeps its
boundary batch copy for retransmission, defaulting to one second. All four values are
startup-only, and negative values are a configuration error before socket bind.