一:消费者确认
消费者确认或者说消费者应答指的是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 &#