无法在activemq中建立主体

问题描述 投票:0回答:1

我想在.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);
}
asp.net asp.net-core .net-core activemq
1个回答
0
投票

管理控制台无法显示ObjectMessage正文的事实并不是真正的错误。这是预期的行为。请记住,从代理的角度来看,消息正文只是一个字节数组。它可能是文本数据(以多种不同方式编码),图像数据,自定义二进制数据等。代理人不知道如何对其进行解码。它会try将正文显示为文本,但是如果失败,则不会尝试其他任何操作。

为了清楚起见,为了查看ObjectMessage的内容,Web控制台必须具有对象的定义才能反序列化它。没有机制可以告知Web控制台任何数据格式,因此它可以可靠地反序列化消息正文(除了简单文本)。这是避免ObjectMessage的众多原因之一。

我建议您使用简单的文本格式(例如JSON,XML)来表示数据,并在消息中发送而不是使用ObjectMessage。

© www.soinside.com 2019 - 2024. All rights reserved.