企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
~~~ private final static String QUEUE_NAME = "simple_queue"; /** * 如果消息不太重要,丢失也没有影响,那么自动ACK会比较方便 * 如果消息非常重要,不容丢失。那么最好在消费完成后手动ACK,否则接收消息后就自动ACK,RabbitMQ就会把消息从队列中删除。如果此时消费者宕机,那么消息就丢失了 */ public static void main(String[] args) throws Exception { //获取连接 Connection connection = ConnectionUtil.getConn(); // 创建通道 final Channel channel = connection.createChannel(); // 声明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); //设置每个消费同时只能处理一条消息 channel.basicQos(1); // 消费者 DefaultConsumer consumer = new DefaultConsumer(channel){ @Override public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException { // body 消息体 String msg = new String(body); System.out.println("recv " + msg); //channel.basicAck(envelope.getDeliveryTag(), false); 手动ack } }; // 监听队列, 第二个参数false:手动ack, true:自动ack channel.basicConsume(QUEUE_NAME, true, consumer); } ~~~