https://www.rabbitmq.com/api-guide.html https://www.rabbitmq.com/tutorials/tutorial-six-java.html https://www.rabbitmq.com/tutorials/tutorial-five-java.html https://www.rabbitmq.com/tutorials/tutorial-four-java.html https://www.rabbitmq.com/tutorials/tutorial-three-java.html https://www.rabbitmq.com/tutorials/tutorial-two-java.html https://www.rabbitmq.com/tutorials/tutorial-one-java.html https://github.com/rabbitmq/rabbitmq-website 2023 https://www.baeldung.com/rabbitmq-dynamic-queues import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.DeliverCallback; final ConnectionFactory factory = new ConnectionFactory(); factory.setHost(...); factory.setUsername(...); factory.setPassword(...); factory.setVirtualHost(...); final AMQP.BasicProperties amqpProperties = new AMQP.BasicProperties.Builder() .contentType("application/x-protobuf") .priority(0) .messageId("#{id}") .build(); try { (Connection connection = factory.newConnection(); Channel channel = connection.createChannel()) { channel.basicPublish("exchange-name", "route-key", amqpProperties, myDocument.toByteArray()); Thread.sleep(1000L); final DeliverCallback deliverCallback = (consumerTag, delivery) -> { document.set(IngestDocument.parseFrom(delivery.getBody())); log.debug("Response received"); }; // Consume the response from the queue channel.basicConsume(rabbitConfig.getRabbitMQConsumeQueue(), true, deliverCallback, consumerTag -> { }); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } ... }