package com.intrbiz.bergamot.queue;
import java.util.UUID;
import com.intrbiz.bergamot.model.message.check.ExecuteCheck;
import com.intrbiz.bergamot.model.message.reading.ReadingParcelMO;
import com.intrbiz.bergamot.model.message.result.ResultMO;
import com.intrbiz.bergamot.queue.impl.RabbitWorkerQueue;
import com.intrbiz.bergamot.queue.key.AdhocResultKey;
import com.intrbiz.bergamot.queue.key.ReadingKey;
import com.intrbiz.bergamot.queue.key.ResultKey;
import com.intrbiz.bergamot.queue.key.WorkerKey;
import com.intrbiz.queue.Consumer;
import com.intrbiz.queue.DeliveryHandler;
import com.intrbiz.queue.QueueAdapter;
import com.intrbiz.queue.QueueManager;
import com.intrbiz.queue.RoutedProducer;
import com.intrbiz.queue.name.NullKey;
/**
* Send events to and from compute hosts
*/
public abstract class WorkerQueue extends QueueAdapter
{
static
{
RabbitWorkerQueue.register();
}
public static WorkerQueue open()
{
return QueueManager.getInstance().queueAdapter(WorkerQueue.class);
}
// checks
public abstract RoutedProducer<ExecuteCheck, WorkerKey> publishChecks(WorkerKey defaultKey);
public RoutedProducer<ExecuteCheck, WorkerKey> publishChecks()
{
return this.publishChecks(null);
}
public abstract Consumer<ExecuteCheck, WorkerKey> consumeChecks(DeliveryHandler<ExecuteCheck> handler, UUID site, String workerPool, String engine, boolean agentRouting, UUID workerId);
public Consumer<ExecuteCheck, WorkerKey> consumeChecks(DeliveryHandler<ExecuteCheck> handler, UUID site, String workerPool, String engine)
{
return this.consumeChecks(handler, site, workerPool, engine, false, null);
}
public abstract Consumer<ExecuteCheck, NullKey> consumeDeadChecks(DeliveryHandler<ExecuteCheck> handler);
public abstract Consumer<ExecuteCheck, NullKey> consumeDeadAgentChecks(DeliveryHandler<ExecuteCheck> handler);
// result
public abstract RoutedProducer<ResultMO, ResultKey> publishResults(ResultKey defaultKey);
public RoutedProducer<ResultMO, ResultKey> publishResults()
{
return this.publishResults(null);
}
/**
* Consume results targeted to a specific processor
*/
public abstract Consumer<ResultMO, ResultKey> consumeResults(DeliveryHandler<ResultMO> handler, String instance);
/**
* Consume results which were not successfully routed to the intended processor
* @return
*/
public abstract Consumer<ResultMO, ResultKey> consumeFallbackResults(DeliveryHandler<ResultMO> handler);
// metrics
public abstract RoutedProducer<ReadingParcelMO, ReadingKey> publishReadings(ReadingKey defaultKey);
public RoutedProducer<ReadingParcelMO, ReadingKey> publishReadings()
{
return this.publishReadings(null);
}
/**
* Consume readings targeted to a specific processor
*/
public abstract Consumer<ReadingParcelMO, ReadingKey> consumeReadings(DeliveryHandler<ReadingParcelMO> handler, String instance);
/**
* Consume readings which were not successfully routed to the intended processor
* @return
*/
public abstract Consumer<ReadingParcelMO, ReadingKey> consumeFallbackReadings(DeliveryHandler<ReadingParcelMO> handler);
// adhoc checks
/**
* Publish adhoc results
*/
public abstract RoutedProducer<ResultMO, AdhocResultKey> publishAdhocResults();
/**
* Consume adhoc results
* @param handler
*/
public abstract Consumer<ResultMO, AdhocResultKey> consumeAdhocResults(UUID adhocId, DeliveryHandler<ResultMO> handler);
}