ActiveMQBytesMessage writeBytes 不起作用,消息未发送

ActiveMQBytesMessage writeBytes not working, message not sent

提问人:Noel93 提问时间:10/3/2023 最后编辑:Justin BertramNoel93 更新时间:10/3/2023 访问量:35

问:

我正在尝试向 ActiveMQ“Classic”5.7.0 发送消息。但是,即使没有错误消息或任何指示出了什么问题,它似乎也没有达到目标。最终,应用程序在等待显然永远不会到来的答案时停止。队列本身不会为每个 Web 管理控制台注册任何传入消息。

该消息的配置如下:

var bytesMessage = session.createBytesMessage();

// Message Header
jmsMessage.clearProperties();
MessageMetadata metadata = getSomeMetadata();
bytesMessage.setStringProperty("Property", metadata.getSomeProperty());
// etc.

// Write Message
bytesMessage.clearBody();
bytesMessage.writeBytes(payload);
log.debug("BytesMessage: {}", bytesMessage);

session是正确配置的会话 是一个非空字节数组,以这种方式构建:payloadsession

var factory = new ActiveMQConnectionFactory();
factory.setBrokerURL(BROKER_URL);
factory.setUserName(USERNAME);
factory.setPassword(PASSWORD);
factory.setClientIDPrefix(APP_NAME);

var connection = factory.createConnection();
connection.start();
var session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

但是,记录的内容如下所示:bytesMessage

ActiveMQBytesMessage {
commandId = 0, 
responseRequired = false, 
messageId = ID:My-Laptop-13245-1696261289246-1:1:1:1:1, 
originalDestination = null, 
originalTransactionId = null, 
producerId = null, 
destination = queue://MY.ACTIVEMQ.QUEUE, 
transactionId = null, 
expiration = 0, 
timestamp = 1696261289705, 
arrival = 0, 
brokerInTime = 0, 
brokerOutTime = 0, 
correlationId = null, 
replyTo = null, 
persistent = true, 
type = null, 
priority = 4, 
groupID = null, 
groupSequence = 0, 
targetConsumerId = null, 
compressed = false, 
userID = null, 
content = org.apache.activemq.util.ByteSequence@34bb4e23, 
marshalledProperties = null, 
dataStructure = null, 
redeliveryCounter = 0, 
size = 0, 
properties = {Property=someProperty, ...}, 
readOnlyProperties = false, 
readOnlyBody = false, 
droppable = false} 
ActiveMQBytesMessage{ bytesOut = null, dataOut = null, dataIn = null }

之后,我尝试发送这样的消息:

Queue destination = session.createQueue(MY_QUEUE);
MessageProducer producer = session.createProducer(destination);
producer.send(destination, bytesMessage);

但消息永远不会到达队列。

所以特别特别,空的对我来说很突出,尽管我不知道这是否是消息没有发送的原因。我做了什么有什么问题吗?我正在使用 .size = 0ActiveMQBytesMessage{ bytesOut = null, dataOut = null, dataIn = null }activemq-core:5.7.0

队列 JMS ActiveMQ

评论

0赞 Noel93 10/3/2023
@JustinBertram我已经用更多代码更新了我的帖子。我们之所以使用 Classic,是因为使用 Artemis 时,项目中存在某种依赖冲突,至少这是我从同事那里听到的。感谢您的帮助!
0赞 Noel93 10/3/2023
发送方没有任何错误。应用程序只有在等待显然永远不会到来的答案时才会停止。队列本身不会为每个 Web 管理控制台注册任何传入消息。
0赞 Noel93 10/3/2023
对于 Artemis 问题,我只知道它与 JMS v2 与 v1.1 有关,并且在我们引入 JMS2 时会崩溃(可能是遗留代码)。
0赞 Tim Bish 10/3/2023
ActiveMQ 5.7.0 很古老,从那时起已经有许多版本,其中包含各种修复,因此第一件事是升级到最新版本。
0赞 Tim Bish 10/3/2023
如果对新创建的消息调用 clearBody,则旧消息对象中可能存在失败的错误,因此不要这样做,因为无论如何都不需要它,也不要在新消息上调用 clearProperties,同样,不需要。

答: 暂无答案