RabbitMQ( 四 ) 消息确认Ack

本文介绍了RabbitMQ的消费者确认机制,包括自动应答和手动应答,以及特殊情况下的消息处理。同时,提到了生产者确认的Confirm机制和事务机制,并强调Confirm机制在性能上的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:消费者确认

消费者确认或者说消费者应答指的是RabbitMQ需要确认消息到底有没有被收到 
- 自动应答

boolean autoAck = true;
channel.basicConsume(QUEUE_NAME, autoAck, consumer);

在订阅消息的时候可以指定应答模式,当自动应答等于true的时候,表示当消费者一收到消息就表示消费者收到了消息,消费者收到了消息就会立即从队列中删除。

生产者

package com.my.mq;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Producer {

	private final static String QUEUE_NAME = "rabbitMQ.test";
	
	private final static String EXCHANGE_TYPE ="exchange.direct";
	
	private final static String  ROUTING_KEY ="key";

	public static void main(String[] args) throws IOException, TimeoutException {

		// 1.创建连接工厂
		ConnectionFactory factory = new ConnectionFactory();

		// 2.设置RabbitMQ相关信息
		factory.setVirtualHost("/");
		
		factory.setHost("localhost");
		// factory.setHost("127.0.0.1");
		factory.setUsername("guest");
		factory.setPassword("guest");
		// factory.setPort(5672);
		factory.setPort(AMQP.PROTOCOL.PORT); // 5672

		// 3.创建一个新的连接
		Connection con = factory.newConnection();

		// 4.创建一个通道
		Channel channel = con.createChannel();

		String ROUTING_KEY = "key";
		// 5.设定Exchange Type
		channel.exchangeDeclare(EXCHANGE_TYPE, BuiltinExchangeType.DIRECT);
		channel.queueBind(QUEUE_NAME, EXCHANGE_TYPE, ROUTING_KEY);

		// 6.声明一个队列
		channel.queueDeclare(QUEUE_NAME, false, false, false, null);

		String message = "Hello World!";
		// 7. 发送消息到队列中
		for (int i &#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值