【问题标题】:Can I send files using ObjectMessage with Spring JMS?我可以使用带有 Spring JMS 的 ObjectMessage 发送文件吗?
【发布时间】:2020-04-14 12:48:27
【问题描述】:

我使用 Spring Boot、jms 和 IBM MQ。我知道 BytesMessage 存在用于发送文件,但使用 ObjectMessage 对我来说会更方便。我可以这样做还是会导致很大的开销?

【问题讨论】:

    标签: java spring spring-boot ibm-mq spring-jms


    【解决方案1】:

    当使用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.");
            }
        }
    

    【讨论】:

    • IBM MQ 文档也说有可能,请参阅The JMS message body
    • 要创建ObjectMessage,类必须实现Serializable
    • @GaryRussell 是的,它必须实现可序列化,所以我不能只在 MQ 中发送我从休息中得到的 MultipartFile。所以,我必须将它包装在可序列化的东西中或将其转换为字节。哪种方式更可取?
    • 请注意,使用 ObjectMessage 存在安全问题。您可能必须提供一个白名单文件来命名可以通过这种方式传输的类。见the docs
    • &gt;So, I have to wrap it in something serializable 这行不通,因为所有字段都必须是 Serializable(或 transient - 这意味着跳过此字段)才能使用 Java 序列化。考虑使用其他一些技术,例如 JSON。
    猜你喜欢
    • 1970-01-01
    • 2020-07-13
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2020-12-09
    • 1970-01-01
    相关资源
    最近更新 更多