RabbitMQ的Message详解

本文介绍了RabbitMQ中Message的基本构成,包括Properties和Body,重点解析了MessageProperties中的各种修饰属性,如消息类型、内容编码、消息ID等。同时,概述了消息的三种状态:Ready、Unacked和Total。此外,讨论了发送和接收消息时如何处理基本类型和对象数据。
摘要由CSDN通过智能技术生成

一、前言

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转为需要的类型,再进行数据传递和业务处理,接收消息的类型分为两种情况:基本类型和对象;

接收的数据属于基本类型;
在这里插入图片描述
接收的数据属于对象;
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值