收到的ActiveMQBytesMessage中的内容为空

收到的ActiveMQBytesMessage中的内容为空,activemq,nms,Activemq,Nms,当我收到ActiveMQBytesMessage时,Content属性的长度正好是预期的长度,但所有字节都是零,它看起来像是一个未初始化的缓冲区,长度刚好正确 我还在message对象上尝试了ReadBytes(buffer,length),得到了相同的空缓冲区 我非常确定消息正确地到达了代理,因为我可以通过ActiveMQ web界面查看消息的XML表示形式,在那里我可以在中看到正确的Base64表示形式 我使用的是最新版本1.5.6 你知道我做错了什么吗 更新 如何在使用发布服务器发送邮件之

当我收到
ActiveMQBytesMessage
时,
Content
属性的长度正好是预期的长度,但所有字节都是零,它看起来像是一个未初始化的缓冲区,长度刚好正确

我还在message对象上尝试了
ReadBytes(buffer,length)
,得到了相同的空缓冲区

我非常确定消息正确地到达了代理,因为我可以通过ActiveMQ web界面查看消息的XML表示形式,在那里我可以在
中看到正确的Base64表示形式

我使用的是最新版本1.5.6

你知道我做错了什么吗

更新

如何在使用发布服务器发送邮件之前创建邮件:

var binMessage = new ActiveMQBytesMessage();
binMessage.Content = /* ... */
这是web界面(队列浏览器)上消息的外观:


这为我提供了正确的内容长度,但实际内容只是空的(十六进制输出仅为00-00-00等)。

我相信这是目前设计的。第一次调用显示长度的内容时,将读取内容字段并返回给您。此时,消息将被读取到其数据流的末尾。在再次调用内容并重新读取数据之前,需要重置消息

这样的办法应该行得通

Console.WriteLine("Message ID: " + message.NMSMessageId);
var bytesMessage = message as IBytesMessage;
if (bytesMessage != null)
{
    byte[] content = bytesMessage.Content;
    Console.WriteLine("Content length: " + content.Length);
    Console.WriteLine("Content: " + BitConverter.ToString(content));
}

尝试添加一些实际代码和或更多详细信息。这里不足以真正帮助您。非常感谢您的快速响应!你能从更新的问题中得到足够的细节吗?处理连接、发布者、使用者、会话等应该可以,因为解决方案已经成功处理了数百万条文本消息:)这个问题只发生在字节消息上。非常感谢,这就解决了问题:)如果您将来有机会进行API重构,我建议通过缓冲区来备份属性,或者只提供
ReadBytes
而不是属性,这使得这种行为更符合预期。根据“微软财产设计指南”,财产不应“产生副作用”。“属性getter应该是没有任何先决条件的简单操作。”;)我不是微软的粉丝,所以我一般不会遵循他们的指导方针。如果您想要一些改进,请打开项目的问题,并附加补丁和测试。
Console.WriteLine("Message ID: " + message.NMSMessageId);
var bytesMessage = message as IBytesMessage;
if (bytesMessage != null)
{
    Console.WriteLine("Content length: " + bytesMessage.Content.Length);
    Console.WriteLine("Content: " + BitConverter.ToString(bytesMessage.Content));
}
Console.WriteLine("Message ID: " + message.NMSMessageId);
var bytesMessage = message as IBytesMessage;
if (bytesMessage != null)
{
    byte[] content = bytesMessage.Content;
    Console.WriteLine("Content length: " + content.Length);
    Console.WriteLine("Content: " + BitConverter.ToString(content));
}