一、前言
RabbitMQ的Meaasge,又称消息,是服务器与应用程序之间传递的数据,由Properties和Body组成, Properties可以对消息进行修饰,如消息的优先级、传输格式(如JSON)、延迟等高级特性,Body则就是消息体内容;
二、Message的状态
消息有三种状态:
- Ready:待消费的消费总数;
- Unacked:待应答(分配)的消息总数;
- Total:总数(Ready+Unacked);
三、Message类
由下图可以看出,Message类主要由properties和body组成;
查看MessageProperties,看看里面能对消息进行哪些修饰;
public class MessageProperties implements Serializable {
private static final int INT_MASK = 32;
private static final long serialVersionUID = 1619000546531112290L;
public static final String CONTENT_TYPE_BYTES = "application/octet-stream";
public static final String CONTENT_TYPE_TEXT_PLAIN = "text/plain";
public static final String CONTENT_TYPE_SERIALIZED_OBJECT = "application/x-java-serialized-object";
public static final String CONTENT_TYPE_JSON = "application/json";
public static final String CONTENT_TYPE_JSON_ALT = "text/x-json";
public static final String CONTENT_TYPE_XML = "application/xml";
public static final String SPRING_BATCH_FORMAT = "springBatchFormat";
public static final String BATCH_FORMAT_LENGTH_HEADER4 = "lengthHeader4";
public static final String SPRING_AUTO_DECOMPRESS = "springAutoDecompress";
public static final String X_DELAY = "x-delay";
public static final String DEFAULT_CONTENT_TYPE = CONTENT_TYPE_BYTES;
public static final MessageDeliveryMode DEFAULT_DELIVERY_MODE = MessageDeliveryMode.PERSISTENT;
public static final Integer DEFAULT_PRIORITY = 0;
private final Map<String, Object> headers = new HashMap<>();
private Date timestamp; //消息的发送时间
private String messageId; //消息id
private String userId; //用户id
private String appId; //应用程序id
private String clusterId; //集群id
private String type; //类型
private String correlationId; //关联id
private String replyTo; //用于指定回复队列的名称
private String contentType = DEFAULT_CONTENT_TYPE;
private String contentEncoding; //消息内容的编码格式
private long contentLength; //消息内容的长度
private boolean contentLengthSet; //是否限制消息内容的长度
private MessageDeliveryMode deliveryMode = DEFAULT_DELIVERY_MODE;
private String expiration; //消息的失效时间
private Integer priority = DEFAULT_PRIORITY;
private Boolean redelivered; //是否重新提交消息
private String receivedExchange; //接收消息的交换机
private String receivedRoutingKey; //接收消息的交换机
private String receivedUserId; //接收消息的用户id
private long deliveryTag; //消息的编号
private boolean deliveryTagSet; //是否设置消息编码
private Integer messageCount; //消息的数量
private String consumerTag; //指定哪个消费者消费
private String consumerQueue; //指定消费此消息的队列
private Integer receivedDelay; //延迟发送
private MessageDeliveryMode receivedDeliveryMode; //消息是否持久化
四、实际使用
在发送消息时,通常使用最多的是编写消息体内容、设置过期时间、设置持久化;发送消息的类型分为两种情况:基本类型和对象;
发送的数据属于基本类型:
发送的数据属于对象;
在接收消息时,实际是把二进制byte转为需要的类型,再进行数据传递和业务处理,接收消息的类型分为两种情况:基本类型和对象;
接收的数据属于基本类型;
接收的数据属于对象;