package org.example.amqp.producer;
import com.rabbitmq.client.*;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
public class SimpleProducer {
private static final String host= "your-end-point";
private static final int port= 5672;
private static final String userName= "your-user-name";
private static final String password= "your-password";
private static final String vhost= "/";
private static final String exchangeName= "your-exchange";
private static final String queueName= "your-queue";
private static final String bindingKey= "your-key";
private static final int deliveryMode= 2;
private static final int batchSize= 50;
private static final int publishConfirmTimeout= 10000;
public static void main(String[] args) throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setVirtualHost(vhost);
factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(5000);
factory.setConnectionTimeout(20000);
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.confirmSelect();
channel.exchangeDeclare(exchangeName, "direct", true, false, false,null);
channel.queueDeclare(queueName, true, false, false, new HashMap<String, Object>());
channel.queueBind(queueName, exchangeName, bindingKey);
channel.addConfirmListener(new ConfirmListener() {
public void handleNack(long deliveryTag, boolean multiple) {
System.out.println("nack received: " + deliveryTag);
public void handleAck(long deliveryTag, boolean multiple) {
System.out.println("ack received: " + deliveryTag);
AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().messageId(UUID.randomUUID().toString()).deliveryMode(deliveryMode).build();
String msgBody = "hello rabbitmq";
channel.basicPublish(exchangeName, bindingKey, true, props, msgBody.getBytes(StandardCharsets.UTF_8));
if (msgsToSend%batchSize ==0) {
channel.waitForConfirms(publishConfirmTimeout);