2. Loaders - aegisql/conveyor GitHub Wiki
Loaders are immutable helper objects that build and submit carts/commands without exposing conveyor internals.
Conveyor accessors:
public interface Conveyor<K, L, OUT> {
PartLoader<K, L> part();
StaticPartLoader<L> staticPart();
BuilderLoader<K, OUT> build();
FutureLoader<K, OUT> future();
CommandLoader<K, OUT> command();
ResultConsumerLoader<K, OUT> resultConsumer();
ResultConsumerLoader<K, OUT> resultConsumer(ResultConsumer<K, OUT> consumer);
ScrapConsumerLoader<K> scrapConsumer();
ScrapConsumerLoader<K> scrapConsumer(ScrapConsumer<K, ?> scrapConsumer);
}PartLoader sends data parts to builds.
Common methods:
-
id(K id)- target one build key. -
foreach()/foreach(SerializablePredicate<K>)- target all/matching active keys. -
label(L label)- part label. -
value(Object value)- part payload. -
creationTime(...),expirationTime(...),ttl(...)- timing control. -
priority(long)/increasePriority()- message priority. -
addProperty(String,Object),addProperties(Map<String,Object>). -
clearProperty(String),clearProperties(). -
place()- submit and returnCompletableFuture<Boolean>.
Example:
conveyor.part()
.id(123)
.label("FIRST")
.value("John")
.ttl(1, TimeUnit.SECONDS)
.addProperty("source", "api")
.place();StaticPartLoader sets conveyor-level static values (applied to new builds).
Methods:
label(L label)value(Object value)priority(long)-
delete()- remove static value for label. -
addProperty(String,Object),addProperties(Map<String,Object>) place()
BuilderLoader creates builds.
Methods:
id(K id)supplier(BuilderSupplier<OUT>)-
creationTime(...),expirationTime(...),ttl(...) priority(long)-
addProperty(...),addProperties(...),clearProperty(...),clearProperties() -
create()-CompletableFuture<Boolean> -
createFuture()-CompletableFuture<OUT>
FutureLoader gets product futures.
Methods:
id(K id)-
creationTime(...),expirationTime(...),ttl(...) priority(long)-
addProperty(...),addProperties(...),clearProperty(...),clearProperties() -
get()-CompletableFuture<OUT>
CommandLoader sends high-priority lifecycle commands.
Single-key workflow (id(...)):
- Timing:
creationTime(...),expirationTime(...),ttl(...) - Lifecycle:
create(),create(builderSupplier),cancel(),timeout(),reschedule(),check() - Completion overrides:
complete(OUT),completeExceptionally(Throwable) - Properties:
addProperty(...),addProperties(...) - Inspection:
peek(),peek(Consumer<ProductBin<K,OUT>>),peekId(Consumer<K>),memento(),memento(Consumer<Memento>),restore(memento) - Conveyor control:
suspend()
Foreach workflow (foreach() / foreach(Predicate<K>)) returns MultiKeyCommandLoader:
- Supported:
cancel,timeout,reschedule,addProperty,addProperties,peek,peekId,memento - Not available in MultiKey loader:
create,check,complete,completeExceptionally,restore,suspend
ResultConsumerLoader configures result consumer chains globally or per-build.
Methods:
- Targeting:
id(...),foreach(),foreach(predicate) - Chain:
first(...),andThen(...),before(...) - Timing/priority:
creationTime(...),expirationTime(...),ttl(...),priority(...) - Properties:
addProperty(...),addProperties(...),clearProperty(...),clearProperties() -
set()- apply chain and returnCompletableFuture<Boolean>
ScrapConsumerLoader configures default scrap consumer chain.
Methods:
first(...)andThen(...)set()
Note: unlike result consumers, scrap consumer configuration is conveyor-level.
If only loader access is needed, retrieve by conveyor name:
PartLoader.byConveyorName("name");
StaticPartLoader.byConveyorName("name");
BuilderLoader.byConveyorName("name");
CommandLoader.byConveyorName("name");
FutureLoader.byConveyorName("name");
ResultConsumerLoader.byConveyorName("name");
ScrapConsumerLoader.byConveyorName("name");Lazy suppliers can be obtained before conveyor creation:
PartLoader.lazySupplier("name").get();
StaticPartLoader.lazySupplier("name").get();
BuilderLoader.lazySupplier("name").get();
CommandLoader.lazySupplier("name").get();
FutureLoader.lazySupplier("name").get();
ResultConsumerLoader.lazySupplier("name").get();
ScrapConsumerLoader.lazySupplier("name").get();