gpt4 book ai didi

java - Weblogic JMS 服务器的巨大存储空间

转载 作者:行者123 更新时间:2023-12-01 13:32:22 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

  1. 压缩消息:suggested by oracle
  2. 压缩表空间; Oracle 不建议

那么让我建议第一个解决方案;然后,您可以在生产者和消费者上启用 weblogic 压缩或自定义压缩。

Weblogic压缩

Navigate to JMS Connection Factory -> Click the Configuration > Default Delivery tab. On the Default Delivery page -> Default Compression Threshold

自定义 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开源实现是exi proxessor西门子提出

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com