Отслеживание обработанных сообщений jms

#java #spring #jms #activemq

#java #spring #jms #activemq

Вопрос:

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

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

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

Комментарии:

1. Вам нужно будет предоставить более подробную информацию, чтобы кто-то мог дать ответ. Похоже, что вы ищете какой-то тип аудита. «Отслеживать» — это довольно расплывчато. Вы могли бы просто поместить сообщение в журнал. вы также могли бы избежать многочисленных таблиц базы данных, сериализуя полезную нагрузку или все сообщение в поле базы данных на каждом этапе обработки.

Ответ №1:

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

Однако вы также можете достичь желаемого с помощью ActiveMQ virtual destinations. С помощью этого вы можете перенаправить 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, где каждое сообщение попадало бы в ОБА .ПРОЦЕСС и .ПРОСМОТРИТЕ очереди.

Ответ №2:

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

Ответ №3:

Kartik,

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

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

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

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

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

Приветствую, Эд