如何制作购物网站,墨刀做网站上下滑动的交互,汕头专业的开发网站方案,山乙建设公司网站2019独角兽企业重金招聘Python工程师标准 简介 当使用RabbitMQ发布消息时#xff0c;消息又AMQP规范中的三个低层帧类型组成#xff1a; Basic.publish方法帧#xff1b;内容头帧#xff1b;消息体帧#xff1b;这三种帧类型按顺序一起工作#xff0c;以便… 2019独角兽企业重金招聘Python工程师标准 简介 当使用RabbitMQ发布消息时消息又AMQP规范中的三个低层帧类型组成 Basic.publish方法帧内容头帧消息体帧这三种帧类型按顺序一起工作以便消息传递时完好无损。 其中内容头帧中的消息属性是一种预定义的值这些值通过设置Basic.Properties数据结构进行指定 content-type属性让消费者知道如何解释消息体content-encoding属性指示消息体使用某种特殊的方式进行压缩或编码message-id和correlation-id属性表示唯一消息标识和消息响应标识用于在工作流程中实现消息跟踪timestamp属性表示消息创建时间expiration属性表示消息的过期时间delivery-mode属性将消息写入磁盘或内存队列app-id和user-id属性帮助追踪出现问题的消息发布者应用程序type属性表示发布者和消费者之间的契约reply-to属性实现响应消息的路由headers属性定义自由格式的属性和实现RabbitMQ路由不建议使用的属性有priority和cluster-id属性。 content-type属性介绍 content-type属性用于描述消息体的数据格式如同各种标准化的HTTP规范content-type传输消息体也可以使用MIME类型。例如如果应用程序正在发送JSON序列化的数据值那么可以将content-type设置为application/json。如果客户端支持自动序列化可以在消费消息时帮你进行序列化的工作。 content-encoding属性 默认情况下通过AMQP发送的消息不会被压缩。但如果在消息数量较大的场景下则可能会希望对消息进行压缩。AMQP提供了content-encoding属性设置压缩编码 不要混淆content-encoding和content-type。与HTTP规范一样content-encoding用于指示content-type之外的某种编码级别。它是一个修饰字段通常用于表明消息体的内容已经使用gzip或其他形式的压缩方式进行了压缩。 结合content-type属性后content-encoding属性使消费者应用程序能够基于一种明确的契约与发布者进行交互。 message-id和correlation-id属性 在AMQP规范中message-id和correlation-id是“应用级别使用”的属性原则上你可以利用它们实现任何目的。这两个字段允许255个字节的UTF-8编码数据并以未压缩的方式存储在Basic.Properties数据结构中。 message-id属性可以存放消息的唯一标识。 correlation-id属性可以指定该消息是另一个消息的响应另一个消息的标识。 timestamp属性 通过使用timestamp属性来指示消息的创建时间消费者可以用来评估消息投递过程的性能。 该属性没有时区上下文因此建议在所有消息中使用UTC或其他统一的时区。 expiration属性 如果消息没有被消费expiration属性会告诉RabbitMQ何时应该丢弃消息。它的格式是一个短字符串允许255个字符。 想要利用expiration属性来实现RabbitMQ消息的自动过期它必须包含一个UNIX纪元时间或整数时间戳然后把它存储为字符串。如果把一个已经超时的消息发布到服务器则该消息不会被路由到任何队列而是被直接丢弃。 RabbitMQ还有一个可以让消息过期的功能在声明队列时将一个x-message-ttl参数和队列定义在一起这个值也是一个UNIX纪元时间戳精度是毫秒数据类型是整数值。 delivery-mode属性 delivery-mode可能是很多人研发人员最感兴趣的一个属性因为它关乎与RabbitMQ的性能。它表示在将消息投递给任何消费者之前是否希望先将它持久化到磁盘上delivery-mode又2个值1表示非持久化消息2表示持久化消息。 不要把消息持久化和队列持久化durable混淆队列持久化是告诉RabbitMQ队列的定义在重启RabbitMQ后是否仍然有效。只有设置了消息的delivery-mode才会告诉RabbitMQ消息是否应该被持久化。一个队列可能包含持久化和未持久化的消息。 前面说过delivery-mode属性关乎性能是因为内存IO比磁盘IO要快因此将delivery-mode设置为1将会尽可能降低消息投递的延迟性。 尽管这可以保证RabbitMQ崩溃时消息不会丢失但是它存在性能和伸缩性的问题设置为持久化将会对消息投递和性能有着很大的影响。 app-id和user-id属性 app-id和user-id属性提供了关于消息的另一层信息可以携带一些信息以便消费者应用程序在处理消息之前进行验证。 app-id属性在AMQP规范中定义为“短字符串”最多允许UTF-8字符。在生成消息时可以使用app-id传递特定API和版本号。可加强使用app-id可以更容易地追踪恶意消息的来源。 user-id属性一般用于存放已经登录的用户信息。 type属性 type属性被定义为“消息类型名称”一般可以用于描述消息中的内容应用程序可以根据它来确定如何处理一个消息。 创建自描述消息时type属性非常有用它可用于指定记录类型或外部定义文件使用Google的Protobuf。 reply-to属性 使用reply-to可以构件一个用来恢复消息的私有响应队列。这个定义中有大多的不明确性所以使用起来需谨慎。 headers属性 headers属性是key-value结构允许用户自定义任意的key和value。 key可以是ASCII或Unicode字符串最大长度为255个字符。value可以是任何有效的AMQP值类型。 与其他属性不同header属性允许你添加任何想要添加的数据到消息头表中。并且RabbitMQ可以根据headers表中填充的值来路由消息而不需要依赖路由键。 priority属性 截至3.5.0版本RabbitMQ已经按照AMQP规范实现了priority字段它的值被定义为0~9之间。用于指定队列中消息的优先级。 priority字段实现为无符号字节所以优先级可以是0~255但优先级应该被限制在0~9之间。 不能使用的属性cluster-id/reserved cluster-id属性在AMQP0-8中定义的但随后被删除。 AMQP0-9-1将其重命名为reserved并声明它必须为空虽然RabbitMQ目前没有根据规范要求它是空的但你最好完全规避它。 转载于:https://my.oschina.net/u/2450666/blog/3027667