Регистрация сообщений, узнать, откуда приходят сообщения? - PullRequest
1 голос
/ 28 августа 2009

На данный момент у нас есть три веб-сайта, открытый API, около десяти сервисов и множество других частей нашей инфраструктуры; и все они могут отправлять статистические сообщения в очередь.

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

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

Но как мы можем делать это в других приложениях, у которых нет URL? Сообщения иногда записываются очень глубоко в инфраструктуру, вещи, которые могут использоваться всеми приложениями, так что это довольно сложно. У кого-нибудь есть хорошие предложения?

Ответы [ 3 ]

1 голос
/ 28 августа 2009

Они должны как-то подключаться к очереди. Это было бы идеальным моментом для определения их личности. Создайте оболочку для вашего объекта регистрации (или соединителя с очередью), чтобы вы могли сохранить эту дополнительную информацию и добавить ее к любому сообщению, которое помещается в очередь до того, как будет отправлено.

[РЕДАКТИРОВАТЬ] В ответ на ваш комментарий: Мое решение для аналогичного случая: как-нибудь передать регистратору. В моем случае у меня есть пара статических методов, но мне действительно нужно знать, кто их использует (не то, что они вызываются; это очевидно из сообщения журнала).

Или вы можете поместить токен в ThreadLocal:

String token = "A";
try {
    pushToken(token);
    ...call method of B...
} finally {
    pullToken(token);
}

private static ThreadLocal context; 

public static void pushToken (String token) {
    if (context.get() == null)
        context.set(token);
}

public static void popToken (String token) {
    if (token.equals (context.get()))
        context.set(null);
}

Этот токен переживет путь вниз по стеку.

0 голосов
/ 29 августа 2009

В случае, если вы используете log4j API-интерфейсов для ведения журналов, вам может быть интересно взглянуть на MDC - отображенный диагностический контекст . Он был разработан специально для этого типа проблем. Проверьте logFaces - это позволит вам легко выловить определенные данные контекста в режиме реального времени или с помощью запросов. В противном случае, ThreadLocal, упомянутый Аароном, также кажется разумным, просто вам придется делать кодирование самостоятельно, а не использовать проверенную концепцию MDC, используемую в log4j в течение длительного времени и многими пользователями.

Раскрытие информации : я являюсь автором этого продукта.

0 голосов
/ 28 августа 2009

Вы на правильном пути с URL. URL означает « Уникальный Локатор ресурсов».

Ты понял мою точку зрения?

Дайте каждому объекту регистрации уникальный идентификатор.

Процесс A ---> Алиса

Процесс B ---> Боб

и т.д ...

Вы можете построить свой журнал следующим образом:

[Алиса] кое-что случилось. [Боб] произошло еще кое-что.

...