前言
我们之前编写虚拟主机时用到了,消费者核心类的使用, 在编写核心类之前,我们先将消费者这个类编写出来
在消费者类中,我们需要有
消费者的身份标识
消费者要消费的队列
应答方式:之前我们说过应答方式分为俩种,一种是手动应答,一种是自动应答
回调函数 - 通过一个接口来实现
回调函数的实现
package com.example.demo.Common;
import com.example.demo.mqServer.core.BasicProperties;
import java.io.IOException;
/*
* 只是一个单纯的函数式接口(回调函数). 收到消息之后要处理消息时调用的方法.
*/
@FunctionalInterface
public interface Consumer {
// 通过这个方法把消息推送给对应的消费者.
void handleDelivery(String consumerTag, BasicProperties basicProperties, byte[] body) throws MqException, IOException;
}
消费者类
package com.example.demo.Common;
import lombok.Data;
/*
* 表示一个消费者(完整的执行绑定)
* */
public class ConsumEnv {
// consumerTag: 消费者的身份标识
// queueName : 要消费的那个队列
// autoAck: 消息被消费完成后, 应答的方式. 为 true 自动应答. 为 false 手动应答.
// consumer: 是一个回调函数.
String consumerTag;
String queueName;
boolean autoAck;
Consumer consumer;
public ConsumEnv(String consumerTag, String queueName, boolean autoAck, Consumer consumer) {
this.consumerTag = consumerTag;
this.queueName = queueName;
this.autoAck = autoAck;
this.consumer = consumer;
}
public String getConsumerTag() {
return consumerTag;
}
public void setConsumerTag(String consumerTag) {
this.consumerTag = consumerTag;
}
public String getQueueName() {
return queueName;
}
public void setQueueName(String queueName) {
this.queueName = queueName;
}
public boolean isAutoAck() {
return autoAck;
}
public void setAutoAck(boolean autoAck) {
this.autoAck = autoAck;
}
public Consumer getConsumer() {
return consumer;
}
public void setConsumer(Consumer consumer) {
this.consumer = consumer;
}
}