package net.openhft.chronicle.engine.cfg; import net.openhft.chronicle.engine.api.tree.Asset; import net.openhft.chronicle.engine.api.tree.AssetTree; import net.openhft.chronicle.engine.api.tree.RequestContext; import net.openhft.chronicle.engine.query.QueueConfig; import net.openhft.chronicle.engine.tree.MessageAdaptor; import net.openhft.chronicle.engine.tree.VanillaAsset; import net.openhft.chronicle.wire.AbstractMarshallableCfg; import net.openhft.chronicle.wire.WireType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.function.Function; import static net.openhft.chronicle.engine.api.tree.RequestContext.requestContext; /** * @author Rob Austin. * Configures a Chronicle Queue */ public class QueueCfg extends AbstractMarshallableCfg implements Installable { private int masterId = 1; private String basePath = null; private Class topicClass = String.class; private Class messageClass = String.class; private boolean acknowledgment = false; private MessageAdaptor messageAdaptor = null; private WireType wireType = WireType.BINARY; private String cluster = ""; @Nullable @Override public Void install(@NotNull String uriPath, @NotNull AssetTree assetTree) throws Exception { @NotNull final RequestContext requestContext = requestContext(uriPath); if (requestContext.bootstrap() != null) throw new UnsupportedOperationException("Its not possible to set the bootstrap when " + "acquiring a queue"); final Function<String, Integer> queueSource = s -> s.equals(uriPath) ? masterId : 1; final Asset asset = assetTree.acquireAsset(uriPath); ((VanillaAsset) asset).configQueueServer(); final QueueConfig qc = asset.getView(QueueConfig.class); if (qc == null) asset.addView(new QueueConfig(queueSource, acknowledgment, messageAdaptor, wireType)); assetTree.acquireView(requestContext.view("queue") .type(topicClass) .type2(messageClass) .basePath(basePath) .cluster(cluster)); return null; } }