在我的weblogic服务器(4个节点)中,我定义了具有(Oracle)数据库存储的可迁移JMS服务器。在这里,我每秒接收1000条消息。每个消息都是大约1kB的XML消息。

我可能需要停止Java MDB 1天并存储数GB的数据(由于维护)。

如何(以很少的开销)保存这些压缩的消息以减少空间?

最佳答案

有两种可能性,但总的来说,主要思想是压缩数据:


压缩消息:suggested by oracle
压缩表空间;甲骨文不建议


然后让我提出第一个解决方案:然后,您可以对生产者和使用者启用weblogic压缩或自定义压缩。

Weblogic压缩


导航到JMS Connection Factory->单击“配置”>
默认投放标签。在默认交付页面上->默认
压缩阈值


自定义GZIP压缩


发送前压缩xml消息
收到时解压缩


例如,无论生产者是否压缩消息,我都会在MDB上使用以下代码来提取文本;

   protected String getText(Message message) throws JMSException, IOException {
    if (message instanceof TextMessage) {
        return ((TextMessage) message).getText();
    } else if (message instanceof BytesMessage) {
        byte zipped[] = new byte[(int) ((BytesMessage) message)
                .getBodyLength()];
        ((BytesMessage) message).readBytes(zipped);
        ByteArrayInputStream bais = new ByteArrayInputStream(zipped);
        StringBuilder sb = null;
        GZIPInputStream in = null;
        try {
            in = new GZIPInputStream(bais);
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(in));
            sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line);
            }
        } finally {
            try {
                if (in != null)
                    in.close();
            } catch (IOException e) {
                log.error("getText: ", e);
            }
            try {
                if (bais != null)
                    bais.close();
            } catch (IOException e) {
                log.error("getText: ", e);
            }
        }
        return sb.toString();
    } else {
        throw new JMSException("Unrecognized message type "
                + message.getClass());
    }
}


自定义EXI压缩

最近,我对Efficient XML Interchange (EXI) Format 1.0进行了评估。
这里的指标:


原始消息:8903B
压缩消息:1212B
exi无架构:903B
具有模式的exi:856B


但是唯一的Java开源实现是siemens提出的exi proxessor

关于java - Weblogic JMS服务器的巨大存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21490522/

10-09 09:43