【问题标题】:How can we save Java Message Queues for reference?我们如何保存 Java 消息队列以供参考?
【发布时间】:2019-07-27 15:15:58
【问题描述】:

我们如何跟踪进入 Java 消息队列的每条消息?我们需要保存消息以供以后参考。我们已经将它记录到应用程序日志 (log4j) 中,但我们需要稍后查询它们。

【问题讨论】:

    标签: java message-queue


    【解决方案1】:

    你可以存储它们

    • 在内存中 - 在集合或内存数据库中
    • 在独立数据库中

    【讨论】:

      【解决方案2】:

      您可以为消息创建一个数据库日志表,将消息按原样存储在 BLOB 列中,将其创建/发布到 MQ 的时间戳和一个简单的计数器作为主键存储。如果您想创建已发送消息的统计报告,还可以添加消息类型等字段。

      可以通过使用时间戳列删除所有早于保留期的消息来完成表的清理。

      【讨论】:

        【解决方案3】:

        我过去实现过这样的解决方案,我们选择将消息及其所有特征存储在数据库中,并在此基础上开发了一个搜索、重播和取消应用程序。这是Message Store 模式:


        (来源:eaipatterns.com

        我们也将此应用程序用于Dead Letter Channel


        (来源:eaipatterns.com

        如果您不想构建自定义解决方案,请查看 CodeStreet 的 ReplayService for JMS

        【讨论】:

          【解决方案4】:

          最好的方法是使用中间件提供商提供的任何跟踪工具。或者,您可以设置一个中间侦听器,其唯一工作就是记录消息并转发到您现有的应用程序。

          在大多数情况下,您会发现中间件提供商已经有能力为您执行此操作,而无需您的应用程序进行更改或感知。

          【讨论】:

            【解决方案5】:

            我会将队列更改为主题,然后保留处理消息的原始使用者,并添加另一个用于审核消息到数据库的使用者。

            一些 JMS 提供者满足主题到队列桥的定义,然后消费者从他们自己的专用队列接收,并且不必读取由于其他消费者不活动而留在队列中的过去消息。

            或者,您可以编写一个 log4j 附加程序,它将您记录的消息写入数据库。

            【讨论】:

              猜你喜欢
              • 2022-12-13
              • 2011-05-14
              • 2015-09-19
              • 2021-09-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-03-31
              • 2015-08-22
              相关资源
              最近更新 更多