package com.intrbiz.bergamot.queue.impl;
import com.intrbiz.bergamot.io.BergamotTranscoder;
import com.intrbiz.bergamot.model.message.agent.manager.AgentManagerRequest;
import com.intrbiz.bergamot.model.message.agent.manager.AgentManagerResponse;
import com.intrbiz.bergamot.queue.BergamotAgentManagerQueue;
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 RabbitBergamotAgentManagerQueue extends BergamotAgentManagerQueue
{
public static final void register()
{
QueueManager.getInstance().registerQueueAdapter(BergamotAgentManagerQueue.class, RabbitBergamotAgentManagerQueue::new);
}
private final BergamotTranscoder transcoder = new BergamotTranscoder();
private final QueueBrokerPool<Channel> broker;
@SuppressWarnings("unchecked")
public RabbitBergamotAgentManagerQueue(QueueBrokerPool<?> broker)
{
this.broker = (QueueBrokerPool<Channel>) broker;
}
public String getName()
{
return "bergamot-agent-manager-queue";
}
@Override
public RPCServer<AgentManagerRequest, AgentManagerResponse> createBergamotAgentManagerRPCServer(RPCHandler<AgentManagerRequest, AgentManagerResponse> handler)
{
return new RabbitRPCServer<AgentManagerRequest, AgentManagerResponse>(
this.broker,
this.transcoder.asQueueEventTranscoder(AgentManagerRequest.class),
this.transcoder.asQueueEventTranscoder(AgentManagerResponse.class),
handler,
new Queue("bergamot.agent.manager.requests", true),
new Exchange("bergamot.agent.manager", "fanout", true)
);
}
@Override
public RPCClient<AgentManagerRequest, AgentManagerResponse, RoutingKey> createBergamotAgentManagerRPCClient()
{
return new RabbitRPCClient<AgentManagerRequest, AgentManagerResponse, RoutingKey>(
this.broker,
this.transcoder.asQueueEventTranscoder(AgentManagerRequest.class),
this.transcoder.asQueueEventTranscoder(AgentManagerResponse.class),
new Exchange("bergamot.agent.manager", "fanout", true),
new Queue("bergamot.agent.manager.requests", true).toKey()
);
}
@Override
public void close()
{
}
}