package com.intrbiz.bergamot.queue.impl;
import com.intrbiz.bergamot.io.BergamotTranscoder;
import com.intrbiz.bergamot.model.message.cluster.manager.ClusterManagerRequest;
import com.intrbiz.bergamot.model.message.cluster.manager.ClusterManagerResponse;
import com.intrbiz.bergamot.queue.BergamotClusterManagerQueue;
import com.intrbiz.queue.QueueBrokerPool;
import com.intrbiz.queue.QueueManager;
import com.intrbiz.queue.RPCClient;
import com.intrbiz.queue.RPCHandler;
import com.intrbiz.queue.RPCServer;
import com.intrbiz.queue.name.Exchange;
import com.intrbiz.queue.name.Queue;
import com.intrbiz.queue.name.RoutingKey;
import com.intrbiz.queue.rabbit.RabbitRPCClient;
import com.intrbiz.queue.rabbit.RabbitRPCServer;
import com.rabbitmq.client.Channel;
public class RabbitBergamotClusterManagerQueue extends BergamotClusterManagerQueue
{
public static final void register()
{
QueueManager.getInstance().registerQueueAdapter(BergamotClusterManagerQueue.class, RabbitBergamotClusterManagerQueue::new);
}
private final BergamotTranscoder transcoder = new BergamotTranscoder();
private final QueueBrokerPool<Channel> broker;
@SuppressWarnings("unchecked")
public RabbitBergamotClusterManagerQueue(QueueBrokerPool<?> broker)
{
this.broker = (QueueBrokerPool<Channel>) broker;
}
public String getName()
{
return "bergamot-cluster-manager-queue";
}
@Override
public RPCServer<ClusterManagerRequest, ClusterManagerResponse> createBergamotClusterManagerRPCServer(RPCHandler<ClusterManagerRequest, ClusterManagerResponse> handler)
{
return new RabbitRPCServer<ClusterManagerRequest, ClusterManagerResponse>(
this.broker,
this.transcoder.asQueueEventTranscoder(ClusterManagerRequest.class),
this.transcoder.asQueueEventTranscoder(ClusterManagerResponse.class),
handler,
new Queue("bergamot.cluster.manager.requests", true),
new Exchange("bergamot.cluster.manager", "fanout", true)
);
}
@Override
public RPCClient<ClusterManagerRequest, ClusterManagerResponse, RoutingKey> createBergamotClusterManagerRPCClient()
{
return new RabbitRPCClient<ClusterManagerRequest, ClusterManagerResponse, RoutingKey>(
this.broker,
this.transcoder.asQueueEventTranscoder(ClusterManagerRequest.class),
this.transcoder.asQueueEventTranscoder(ClusterManagerResponse.class),
new Exchange("bergamot.cluster.manager", "fanout", true),
new Queue("bergamot.cluster.manager.requests", true).toKey()
);
}
@Override
public void close()
{
}
}