2

我有一个使用 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 类

4

0 回答 0