当前位置: 首页 > 知识库问答 >
问题:

JMS持久订户持久消息不会持久化到数据库

龙洛城
2023-03-14

我正在使用网络逻辑10.3。我正在尝试配置一个持久订阅,其中包含由 jdbc 存储(在 Oracle DB 中)支持的持久消息。我有一个主题,MDB 正在作为持久订阅者侦听该主题。在场景-1下:如果我发送消息,它会命中MDB。

在场景2中:我挂起了MDB,希望发送到主题的消息只要不被MDB(它是唯一注册的持久订阅者)使用,就会一直存在。但是当我向主题发送消息时,它短暂地出现在那里,然后就消失了(我使用HermesJMS看到它)。

我的印象是,由于消息没有被MDB使用,因此在这种情况下,消息将被记录到JDBC存储中,但oracle db中的WLSTORE表也不会在其中保存任何消息。

后来我发现,这些信息确实出现在主题中

很明显,主题并没有保留消息,但注册在其下的持久订阅会保留消息,直到消息被消费。

问题-1)但是消息不会进入基于Oracle的jdbc商店的事实仍然没有意义?我在这里做错了什么?

问题-2)即使我恢复MDB以开始监听消息,主题仍然显示持久订阅者(在管理控制台中)下的所有消息仍然完整-我希望它们将被删除,因为它们被唯一注册的持久订阅器处理。

共有2个答案

方苗宣
2023-03-14

在进一步的测试中,我发现了一些有趣的事情-

对于问题1)_即使我没有在weblogic 10中为JMS服务器配置jdbc存储,它也有自己的默认文件存储,无需任何配置即可工作。该文件存储用于存储持久订阅的持久消息,即使在服务器重新启动时,该存储也会保留消息。

欲了解更多信息,请访问http://docs . Oracle . com/CD/e 17904 _ 01/web . 1111/e 13701/store . htm # I 1130575

对于问题2)_ 我的MDB期望以某种格式发送XML消息,在我的测试期间,为了保持简单,我开始发送小文本消息,忘记了它们不会在MDB中成功处理。因此,MDB在所有这些消息上都失败了,并回滚了事务,这就是为什么当我恢复MDB时消息从未被删除的原因。

这几乎回答了我的两个问题。

单于俊智
2023-03-14

消息不会显示在主题中,因为主题和队列是不同的通信模型。假设您有一个包含 2 个(持久)订阅者的持久主题:A 和 B。您希望他们两个都收到消息。为了确保这一点,A和B都必须确认他们收到了消息。这也是您重新传递所有消息的原因,重新连接后,您的MDB必须在消息上调用confile(),告诉服务器它已完成处理。这也解释了为什么主题本身不存储消息,它们是按持久使用者存储的。因为 A 可能会提交消息,但 B 不会(可能处于“脱机”状态)。因此,您需要为每个消费者提供一份副本。

 类似资料:
  • Akka持久化使有状态的actor能留存其内部状态,以便在因JVM崩溃、监管者引起,或在集群中迁移导致的actor启动、重启时恢复它。Akka持久化背后的关键概念是持久化的只是一个actor的内部状态的的变化,而不是直接持久化其当前状态 (除了可选的快照)。这些更改永远只能被附加到存储,没什么是可变的,这使得高事务处理率和高效复制成为可能。有状态actor通过重放保存的变化来恢复,从而使它们可以重

  • 消息应答 ack >[danger] noAck: false 手动接收消息模式 async consume() { const ch = await this.app.amqplib.createChannel(); await ch.assertQueue(queueName, { durable: false }); const msg = await new Pro

  • Spark通过在操作中将其持久保存在内存中,提供了一种处理数据集的便捷方式。在持久化RDD的同时,每个节点都存储它在内存中计算的任何分区。也可以在该数据集的其他任务中重用它们。 我们可以使用或方法来标记要保留的RDD。Spark的缓存是容错的。在任何情况下,如果RDD的分区丢失,它将使用最初创建它的转换自动重新计算。 存在可用于存储持久RDD的不同存储级别。通过将对象(Scala,Java,Pyt

  • Redis 支持持久化,即把数据存储到硬盘中。 Redis 提供了两种持久化方式: RDB 快照(snapshot) - 将存在于某一时刻的所有数据都写入到硬盘中。 只追加文件(append-only file,AOF) - 它会在执行写命令时,将被执行的写命令复制到硬盘中。 这两种持久化方式既可以同时使用,也可以单独使用。 将内存中的数据存储到硬盘的一个主要原因是为了在之后重用数据,或者是为了防

  • 不要害怕文件系统! Kafka 对消息的存储和缓存严重依赖于文件系统。人们对于“磁盘速度慢”的普遍印象,使得人们对于持久化的架构能够提供强有力的性能产生怀疑。事实上,磁盘的速度比人们预期的要慢的多,也快得多,这取决于人们使用磁盘的方式。而且设计合理的磁盘结构通常可以和网络一样快。 关于磁盘性能的关键事实是,磁盘的吞吐量和过去十年里磁盘的寻址延迟不同。因此,使用6个7200rpm、SATA接口、RA

  • Spark 有一个最重要的功能是在内存中_持久化_ (或 缓存)一个数据集。