我想在.net核心中使用ActiveMQ,我使用Apache.NMS.ActiveMQ
来执行此操作,但是我遇到了问题。我在ActiveMQ管理控制台中看到此错误:
Cannot display ObjectMessage body. Reason: Failed to build body from bytes. Reason: java.io.StreamCorruptedException: invalid stream header: 00010000
这就是我执行此操作的代码的一部分:
private const String QUEUE_DESTINATION = "test-queue";
private IConnection _connection;
private ISession _session;
public MessageQueue()
{
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616?wireFormat.maxInactivityDuration=5000000");
_connection = factory.CreateConnection();
_connection.Start();
_session = _connection.CreateSession();
}
IDestination dest = _session.GetQueue(QUEUE_DESTINATION);
using (IMessageProducer producer = _session.CreateProducer(dest))
{
var objectMessage = producer.CreateObjectMessage(newDoc);
producer.Send(objectMessage);
}
管理控制台无法显示ObjectMessage正文的事实并不是真正的错误。这是预期的行为。请记住,从代理的角度来看,消息正文只是一个字节数组。它可能是文本数据(以多种不同方式编码),图像数据,自定义二进制数据等。代理人不知道如何对其进行解码。它会try将正文显示为文本,但是如果失败,则不会尝试其他任何操作。
为了清楚起见,为了查看ObjectMessage的内容,Web控制台必须具有对象的定义才能反序列化它。没有机制可以告知Web控制台任何数据格式,因此它可以可靠地反序列化消息正文(除了简单文本)。这是避免ObjectMessage的众多原因之一。
我建议您使用简单的文本格式(例如JSON,XML)来表示数据,并在消息中发送而不是使用ObjectMessage。