NServiceBus发送数据问题

时间:2010-04-20 11:59:00

标签: object nservicebus send

我正在使用NServices发送MyMusicMessage类的对象作为打击:

[Serializable]
public class MyMusicMessage:IMessage
{
    public Guid EventId { set; get; }
    public byte[] MusicBytes { set; get; }
}

当MusicBytes的大小约为200k时,可以很好地发送。

但是当大小超过300K时,会出现“MessageQueueException”。

NServiceBus中的对象大小有限制吗?

感谢。

3 个答案:

答案 0 :(得分:2)

在将(小得多)有效负载作为字节数组传输时,我注意到的一件事是NServiceBus将大致像这样(从内存)序列化它:

<MyByteArray>
    <Byte>4</Byte>
    <Byte>183</Byte>
    <Byte>221</Byte>
    <Byte>87</Byte>
    ...
<MyByteArray>

显然,这不是一种有效传输字节数组的好方法,但我确信NServiceBus序列化程序的速度和效率要高,而不是最小的消息大小。

虽然我同意最好将带外的音乐数据转移到带外,对于较小的字节数组有效载荷(如5-10K范围),更好的选择是将字节数组编码为Base64字符串在您的邮件类中使用Convert.ToBase64String(byte[] arr)Convert.FromBase64String(string str)

答案 1 :(得分:1)

在NServiceBus中使用XML序列化程序(这是默认设置)时,它会将数组序列化为通用集合,为每个值创建一个条目。这可能是导致实际消息大小远大于内存中300KB的原因。

我建议您切换到该消息类型的二进制序列化程序。

答案 2 :(得分:0)

MSMQ的限制为4M。我们正在研究2.1的数据总线功能,但在此之前我认为您将音乐有效负载存储在“带外”,并且只传输可以在您的消息中获取数据的地址。

希望这有帮助!