Java RabbitMQ消息属性

Java RabbitMQ消息属性,java,rabbitmq,Java,Rabbitmq,我在RabbitMQ中有这样的代码: byte[] rawBytes = serialize(trxEntities); byte[] zipped = rawBytes; if (shouldBeCompress) { zipped = compressor.compress(rawBytes); } BasicProperties persistentBasic = MessageProperties.PERSISTENT_BASIC; channel.basic

我在RabbitMQ中有这样的代码:

byte[] rawBytes = serialize(trxEntities);    
byte[] zipped = rawBytes;  
if (shouldBeCompress) {  
zipped = compressor.compress(rawBytes);  
}  
BasicProperties persistentBasic = MessageProperties.PERSISTENT_BASIC;  
channel.basicPublish("", queueName, persistentBasic, zipped);  
正如您所看到的,我的一些消息应该被压缩,而其他消息则不应该被压缩。
我是否可以设置任何属性来告诉消费者“嘿!这是一条压缩消息”


PS.“com.rabbitmq.client.AMQP.BasicProperties.BasicProperties(…,映射头…)”对我有帮助吗?我的意思是,我可以在BasicProperties.header中设置任何参数吗?

您可以为它使用包装器,如下所示:

    public class wrapper(){
    public boolean isZipped;
    public String serializedMessage;
}
然后用

或者您可以使用以下代码:

persistentBasic = persistentBasic.builder().headers(filter).build();

并在标题中添加适当的过滤器。

我认为您可以在标题中添加任何您喜欢的内容。但是,有一个名为“contentEncoding”的字段,我认为它更适合这种情况。您可以将“gzip”、“deflate”或压缩算法放在这个字段中,查看这个页面中为HTTP定义的编码:

对于我正在使用RabbitMQ的项目,我们使用一个头字段来标识内容类型和内容编码

例如,队列中的纯文本消息将读取

{'type':'plaintext','encoding':'utf-8'}

压缩数据流通过Base64进行处理,然后发送

{'type':'gzip','encoding':'base64}

RabbitMQ没有标准化的机制来识别内容类型和编码,您可以采用自己的或选择常用的标准。

是的,您可以

我们使用
type
字段指定发送的消息(例如用户信息、心跳等),使用
contentEncoding
字段指定压缩(如果有):

AMQP.BasicProperties.Builder-propsBuilder=new AMQP.BasicProperties.Builder();
propsBuilder.type(typeName);
如果(压缩)
{
propsBuilder.contentEncoding(“zip”);
}
基本属性props=propsBuilder.build();
channel.basicPublish(targetExchange,”,true,道具,数据);
//接收工作如下:
Delivery=consumer.nextDelivery();
字节[]数据=delivery.getBody();
BasicProperties props=delivery.getProperties();
字符串typeName=props.getType();
字符串replyToServerId=props.getReplyTo();
String contentEncoding=props.getContentEncoding();

键入和编码不应该与更广泛使用的方式类似吗?即