我有一个使用 Stomp.js 将消息发送到队列的 Stomp Over WebSocket 客户端:
var destinationProductProd_02 = "jms.queue.shat";
function sendMessageProduct() {
var product = {
productId : "111",
name : "laptop",
quantity: 2
}
var beforeSend = JSON.stringify(product);
console.log("typeof message: "+ typeof beforeSend); // <<--- String
stompClient.send(destinationProductProd_02, {}, beforeSend);
}
在服务器端我有
@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setConcurrency("3-10");
SimpleMessageConverter s = new SimpleMessageConverter();
factory.setMessageConverter(s);
return factory;
}
SimpleMessageConverter 是使用 Spring 的默认转换器。我的听众是下一个:
@JmsListener(containerFactory = "jmsListenerContainerFactory", destination = ORDER_QUEUE)
public void receiveMessage(Session ses, @Payload final Message message, @Headers final Map<String, Object> headers) {
System.out.println("MessageReceiver::receiveMessage(product) payload class: "+ message.getPayload().getClass());
}
message.getPayload().getClass()
指示有效负载类型是字节数组([B)
。
如果我发送文本,为什么我会收到二进制数组?
或者如何将此字节数组转换为 Java 对象。如果我将 JSON 和序列化 Java 对象发送到同一个队列会发生什么......如何在同一个队列中管理两种不同类型的消息?我想使用一些像:
public void receiveMessage(@Payload final Message<Product> message){...}
其中产品是 POJO 类