RabbitMQ的Message详解

一、前言

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

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

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个使用Erlang实现的高并发高可靠AMQP消息队列服务器。它支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ在各种应用场景下被广泛使用。RabbitMQ与Erlang和AMQP密切相关。 Erlang是一种编程语言,它特别适合构建高并发、分布式、实时的系统。RabbitMQ使用Erlang作为其底层开发语言,这使得它能够充分利用Erlang在并发处理和容错性方面的优势。 AMQP(Advanced Message Queuing Protocol)是一个开放标准的消息队列协议,用于在应用程序之间进行可靠的消息传递。RabbitMQ实现了AMQP协议,这意味着它可以与其他遵循AMQP协议的应用程序进行通信,实现可靠的消息传递机制。 要使用RabbitMQ,可以通过Docker安装,使用以下命令运行一个带有管理界面的RabbitMQ容器: ``` docker run -itd --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management ``` 在编写RabbitMQ程序时,可以利用其支持的多种消息模型,例如发布-订阅模型、工作队列模型、路由模型等,根据具体需求选择合适的模型来实现消息传递。 在配置RabbitMQ环境时,可以设置RABBITMQ_SERVER环境变量,并将RabbitMQ的安装路径添加到系统的path变量中,以方便在命令行中直接使用RabbitMQ命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [RabbitMQ使用详解](https://blog.csdn.net/qq_43410878/article/details/123656765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值