我有一个使用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的默认转换器。 我的listerner是下一个:
@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类