前言
对于服务器类中的各个方法的参数,都是通过获取请求中的参数获取的,所以我们要封装虚拟主机的每个方法,让其提供必要的参数
我们首先设计,几个基础类,让后面的类都继承这几个基础类,然后给服务器调用
代码实现
①请求基础类
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
/*
* 对于这个类表示 ,一些公共的参数 ,辅助字段
*/
@Data
public class BasicArguments implements Serializable {
// 表示 一次请求 / 响应的身份标识, 可以把请求和响应来对上
protected String rid;
// 这次通信使用的 channel 的身份标识(TCP 内部的链接)
protected String channelId;
}
②响应基础类
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
/*
* 表示各个远程调用的方法的返回值的公共信息
*/
@Data
public class BasicReturns implements Serializable {
// 用来标识唯一的请求和响应
protected String rid;
// 用来标识一个 channel
protected String channelId;
//表示远程调用方法的返回值
protected boolean ok;
}
③创建交换机
package com.example.demo.Common;
import com.example.demo.mqServer.core.ExchangeType;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
@Data
public class ExchangeDeclareArguments extends BasicArguments implements Serializable {
private String exchangeName;
private ExchangeType exchangeType;
private boolean durable;
private boolean autoDelete;
private Map<String ,Object> arguments;
}
④删除交换机
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class ExchangeDeleteArguments extends BasicArguments implements Serializable {
private String exchangeName;
}
⑤创建队列
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
import java.util.Map;
@Data
public class QueueDeclareArguments extends BasicArguments implements Serializable {
private String queueName;
private boolean durable;
private boolean exclusive;
private boolean autoDelete;
private Map<String ,Object> arguments;
}
⑥删除队列
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class QueueDeleteArguments extends BasicArguments implements Serializable {
private String queueName;
}
⑦创建绑定
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class QueueBindArguments extends BasicArguments implements Serializable {
private String queueName;
private String exchangeName;
private String bindingKey;
}
⑧删除绑定
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class QueueUnbindArguments extends BasicArguments implements Serializable {
private String queueName;
private String exchangeName;
}
10.确认消息
package com.example.demo.Common;
import com.example.demo.mqServer.core.BasicProperties;
import lombok.Data;
import java.io.Serializable;
@Data
public class BasicPublishArguments extends BasicArguments implements Serializable {
private String exchangeName;
private String routingKey;
private BasicProperties basicProperties;
private byte[] body;
}
11.订阅消息
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class BasicConsumeArguments extends BasicArguments implements Serializable {
private String consumerTag;
private String queueName;
private boolean autoAck;
// 这个类对应的 basicConsume 方法中, 还有一个参数, 是回调函数. (如何来处理消息)
// 这个回调函数, 是不能通过网络传输的.
// 站在 broker server 这边, 针对消息的处理回调, 其实是统一的. (把消息返回给客户端)
// 客户端这边收到消息之后, 再在客户端自己这边执行一个用户自定义的回调就行了.
// 此时, 客户端也就不需要把自身的回调告诉给服务器了.
// 这个类就不需要 consumer 成员了.
}
12.删除消息
package com.example.demo.Common;
import lombok.Data;
import java.io.Serializable;
@Data
public class BasicAckArguments extends BasicArguments implements Serializable {
private String queueName;
private String messageId;
}