【发布时间】:2019-05-19 03:20:15
【问题描述】:
我正在尝试使用 Qpid JMS 和 ProtonJ (AMQP 1.0) 发送和接收消息,但无法接收 TextMessage。异常说它不能将JmsBytesMessage 转换为TextMessage:
org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to javax.jms.TextMessage
即使尝试以JmsTextMessage 的形式接收消息也会导致:
org.apache.qpid.jms.message.JmsBytesMessage cannot be cast to org.apache.qpid.jms.message.JmsTextMessage
我发送消息如下:
TextMessage textMessage = session.createTextMessage(message)
Queue queue = session.createQueue(queueName);
MessageProducer producer = session.createProducer(queue);
producer.send(textMessage);
我尝试通过以下方式接收消息:
Queue queue = session.createQueue(queueName);
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
TextMessage message = (TextMessage) consumer.receive();
由于这不起作用,我尝试获取字节并使用 toString 方法:
JmsBytesMessage message = (JmsBytesMessage) consumer.receive();
String stringMessage = message.toString();
结果如下:
JmsBytesMessage { org.apache.qpid.jms.provider.amqp.message.AmqpJmsBytesMessageFacade@10664b39 }
在下一个测试中,我只是使用了字节并将它们转换为字符串:
JmsBytesMessage message = (JmsBytesMessage) consumer.receive();
message.readUTF();
byte[] byteData = null;
byteData = new byte[(int) message.getBodyLength()];
message.readBytes(byteData);
message.reset();
String messageString = new String(byteData);
结果是Sw�testmessage。我想知道那个前缀是什么,因为我还没有发送它。我想它一定是一些编码的东西。
如何接收字符串形式的消息?
【问题讨论】: