package pl.nask.hsn2.framework.bus.monitoring; import java.io.IOException; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.nask.hsn2.bus.api.Destination; import pl.nask.hsn2.bus.api.Message; import pl.nask.hsn2.bus.operations.Operation; import pl.nask.hsn2.bus.operations.TaskAccepted; import pl.nask.hsn2.bus.operations.TaskCompleted; import pl.nask.hsn2.bus.operations.TaskError; import pl.nask.hsn2.bus.operations.TaskErrorReasonType; import pl.nask.hsn2.bus.operations.TaskRequest; import pl.nask.hsn2.bus.rabbitmq.RbtDestination; import pl.nask.hsn2.bus.serializer.MessageSerializer; import pl.nask.hsn2.bus.serializer.MessageSerializerException; import pl.nask.hsn2.bus.serializer.protobuf.ProtoBufMessageSerializer; import com.rabbitmq.client.AMQP.BasicProperties; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class BusMsgInjection { private static final String DEFAULT_CONTENT_TYPE = "application/hsn2+protobuf"; private static final String RBT_HOST = "localhost"; private static final String RBT_MAIN_EXCHANGE_NAME = "main"; private static final String RBT_FRAMEWORK_QUEUE = "fw:l"; private static final Logger LOG = LoggerFactory.getLogger(BusMsgInjection.class); private static final MessageSerializer<Operation> DEFAULT_SERIALIZER = new ProtoBufMessageSerializer(); public static void main(String[] args) throws Exception { new BusMsgInjection().start(); } private void sendOut(Operation operation, Channel channel, Destination dest, String replyTo) { try { // Prepare message. Message message = DEFAULT_SERIALIZER.serialize(operation); message.setDestination(dest); message.setCorrelationId(null); message.setReplyTo(new RbtDestination(RBT_MAIN_EXCHANGE_NAME, replyTo)); // Properties below uses only service name (String, not Destination) as replyTo parameter. String replyToQueueName = message.getReplyTo().getService(); HashMap<String, Object> headers = new HashMap<String, Object>(); // headers.put("x-retries", message.getRetries()); BasicProperties.Builder propertiesBuilder = new BasicProperties.Builder().headers(headers).contentType(DEFAULT_CONTENT_TYPE) .replyTo(replyToQueueName).type(message.getType()); // setup correct correlation id if provided if (message.getCorrelationId() != null && !"".equals(message.getCorrelationId())) { propertiesBuilder.correlationId(message.getCorrelationId()); } String destinationRoutingKey = ((RbtDestination) (message.getDestination())).getService(); String destinationExchange = ((RbtDestination) (message.getDestination())).getExchange(); channel.basicPublish(destinationExchange, destinationRoutingKey, propertiesBuilder.build(), message.getBody()); } catch (MessageSerializerException e) { LOG.error("Serialization error.", e); } catch (IOException e) { LOG.error("IO error.", e); } } void start() throws Exception { ConnectionFactory cf = new ConnectionFactory(); cf.setHost(RBT_HOST); Connection c = cf.newConnection(); Channel ch = c.createChannel(); ch.exchangeDeclare(RBT_MAIN_EXCHANGE_NAME, "fanout"); Destination toFramework = new RbtDestination(RBT_MAIN_EXCHANGE_NAME, RBT_FRAMEWORK_QUEUE); TaskAccepted ta = new TaskAccepted(1111, 666); sendOut(ta, ch, toFramework, ""); TaskCompleted tc = new TaskCompleted(1112, 666); sendOut(tc, ch, toFramework, ""); TaskError te = new TaskError(1113, 666, TaskErrorReasonType.DEFUNCT); sendOut(te, ch, toFramework, ""); Thread.sleep(1000); Destination toReporter = new RbtDestination(RBT_MAIN_EXCHANGE_NAME, "srv-reporter:l"); TaskRequest tr = new TaskRequest(1114, 666, 1); sendOut(tr, ch, toReporter, RBT_FRAMEWORK_QUEUE); Destination toFileFeeder = new RbtDestination(RBT_MAIN_EXCHANGE_NAME, "srv-feeder-list:l"); TaskRequest tr2 = new TaskRequest(1115, 666, 1); sendOut(tr2, ch, toFileFeeder, RBT_FRAMEWORK_QUEUE); ch.close(); c.close(); } }