我正在开发一个生产者-消费者应用程序。两者通过ActiveMQ队列连接。 当我尝试发送消息时,在内容之前添加以下字符串:
Sr�)�x-opt-jms-destQ�x-opt-jms-msg-typeQSs�d
�/ID:72a1faef-ff5a-40dd-aecc-61e94c0a432a:1:1:1-1@�queue://name_of_my_queue@@@@@@�~
�Sw�
actual message
消息被消费者检测为 ActiveMQBytesMessage,并且无法正确获取其内容。 以下是生产者和消费者的代码片段:
消费者
String receiveMessage() {
MessageConsumer consumer = session.createConsumer(session.createQueue(receiverQueue));
String content = "";
try {
Message message = consumer.receive();
if(message instanceof TextMessage) {
content = ((TextMessage) message).getText();
}
else {
BytesMessage byteMessage = (BytesMessage) message;
byte[] byteData = null;
byteData = new byte[(int) byteMessage.getBodyLength()];
byteMessage.readBytes(byteData);
byteMessage.reset();
content = new String(byteData);
}
}
catch (JMSException | JsonProcessingException e) {
log.error(e.getMessage());
}
return content;
}
制作人
void sendMessage() {
JMSContext context;
try {
context = connectionFactory.createContext(Session.AUTO_ACKNOWLEDGE);
JMSProducer producer = context.createProducer();
TextMessage tm = context.createTextMessage("TestMessage");
producer.send(context.createQueue(myQueue), tm);
}
}
catch (JMSException | JsonProcessingException e) {
System.out.println(e.getMessage());
}
}
生产者位于 quarkus 应用程序中。 我怎么解决这个问题?谢谢!
对于那些可能遇到同样问题的人:我发现问题出在经纪人身上。我使用的是
rmohr/activemq
容器,我通过切换到 vromero/activemq-artemis
解决了这个问题。