【发布时间】:2020-04-14 12:48:27
【问题描述】:
我使用 Spring Boot、jms 和 IBM MQ。我知道 BytesMessage 存在用于发送文件,但使用 ObjectMessage 对我来说会更方便。我可以这样做还是会导致很大的开销?
【问题讨论】:
标签: java spring spring-boot ibm-mq spring-jms
我使用 Spring Boot、jms 和 IBM MQ。我知道 BytesMessage 存在用于发送文件,但使用 ObjectMessage 对我来说会更方便。我可以这样做还是会导致很大的开销?
【问题讨论】:
标签: java spring spring-boot ibm-mq spring-jms
当使用JmsTemplate.convertAndSend时,Spring会根据你发送的内容自动使用消息类型。请参阅SimpleMessageConverter(这是默认值)。
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
if (object instanceof Message) {
return (Message) object;
}
else if (object instanceof String) {
return createMessageForString((String) object, session);
}
else if (object instanceof byte[]) {
return createMessageForByteArray((byte[]) object, session);
}
else if (object instanceof Map) {
return createMessageForMap((Map<? ,?>) object, session);
}
else if (object instanceof Serializable) {
return createMessageForSerializable(((Serializable) object), session);
}
else {
throw new MessageConversionException("Cannot convert object of type [" +
ObjectUtils.nullSafeClassName(object) + "] to JMS message. Supported message " +
"payloads are: String, byte array, Map<String,?>, Serializable object.");
}
}
【讨论】:
ObjectMessage,类必须实现Serializable。
>So, I have to wrap it in something serializable 这行不通,因为所有字段都必须是 Serializable(或 transient - 这意味着跳过此字段)才能使用 Java 序列化。考虑使用其他一些技术,例如 JSON。