Отслеживание обработанных сообщений JMS - PullRequest
2 голосов
/ 10 июня 2011

Я использую ActiveMQ, Spring.

Есть ли способ, которым я могу отслеживать все обработанные сообщения. Я должен следить за тем, что все сообщения были обработаны. Я также хочу просмотреть эти обработанные сообщения на более позднем этапе.

  • Должен ли я использовать базу данных для этого?
  • Есть ли хорошая библиотека, которая может упростить эту операцию
  • Я не хочу делать таблицы в базе данных для каждого типа объекта

Ответы [ 3 ]

1 голос
/ 10 июня 2011
  1. Я бы использовал базу данных.
  2. Возможно, вы могли бы использовать ORM, такой как Hibernate, но JDBC или SpringTemplates могут быть лучше.
  3. Вместо того, чтобы создавать отдельную таблицу для каждого объекта модели, создайте таблицу 'message' и сериализуйте необычные части в большой двоичный объект полезной нагрузки (или текст). Затем вы можете использовать утилиту для десериализации сообщения для последующего просмотра (или воспроизведения).
1 голос
/ 10 июня 2011

В общем, я бы посоветовал вам либо регистрировать и / или записывать сообщения в базу данных.Если вы просто хотите просмотреть сообщения позже, простой регистрации может быть достаточно.Если вам нужно выполнить транзакционный свертывание / поиск через пользовательский интерфейс, тогда база данных лучше.

Однако вы также можете достичь того, чего хотите, с помощью виртуальных назначений ActiveMQ.При этом вы можете переадресовать 1 пункт назначения на 2 других пункта назначения.Тогда ваше приложение может прослушивать 1 пункт назначения, а копия сообщения будет находиться в другом месте для вашего обзора.Например:

  <broker persistent="false" useJmx="false" xmlns="http://activemq.apache.org/schema/core">
    <destinationInterceptors>
      <virtualDestinationInterceptor>
        <virtualDestinations>
          <compositeQueue name="MY.QUEUE">
            <forwardTo>
              <queue physicalName="MY.QUEUE.PROCESS" />
              <topic physicalName="MY.QUEUE.REVIEW" />
            </forwardTo>
          </compositeQueue>
        </virtualDestinations>
      </virtualDestinationInterceptor>
    </destinationInterceptors>

  </broker>

будет определять очередь MY.QUEUE, где каждое сообщение будет заканчиваться ОБА в очередях .PROCESS и .REVIEW.

0 голосов
/ 10 июня 2011

Картик,

Это хороший вопрос программирования, но это скорее вопрос о том, что я должен программировать, а не вопрос «Как я могу это сделать». Трудно ответить на вопрос «Что я должен программировать», потому что то, что вы должны программировать, напрямую зависит от того, что вам нужно. В лучшем случае мы можем только догадываться, что вам действительно нужно.

Если вам нужно обновить обработанные сообщения JMS, то база данных упростит обновление. Если вам нужно доказать, что никто не обновлял запись в журнале, база данных может не выполнить эту работу.

Допустим, этот журнал используется для определения того, какие очень медленные для обработки сообщений еще нужно завершить. Затем база данных обеспечит легкий поиск при условии, что человек, который ищет, знает SQL. Однако, если журнал является скорее архивом, тогда база данных просто добавляет накладные расходы ко всему процессу, подойдет структурированный файл.

В Java есть JDBC для записи и извлечения в базы данных, и это не сложный API для использования. Опять же, есть также несколько достойных каркасов журналирования, и, конечно, всегда есть FileOutputStream. Не зная, как использовать этот журнал, очень трудно определить, какие методы действительно излишни, также невозможно узнать, каких методов недостаточно.

Вернитесь назад и проверьте, как должен использоваться журнал, а затем оцените, являются ли функции, предоставляемые базами данных, излишними.

Cheers, Ed

...