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