2008-10-24 7 views
6

Я использую activemq для передачи запросов между различными процессами. В некоторых случаях у меня есть несколько дублирующихся сообщений (которые являются запросами) в очереди. Я хотел бы иметь только один. Есть ли способ отправить сообщение таким образом, что он заменит старое сообщение похожими атрибутами? Если этого не происходит, есть способ проверить очередь и проверить сообщение с конкретными атрибутами (в этом случае я не буду отправлять новое сообщение, если существует более старый).Замена сообщения в очереди jms

Clarrification (на основе ответа Дейва): Я действительно пытаюсь удостовериться, что в очереди нет дубликатов сообщений, чтобы уменьшить объем обработки, который происходит каждый раз, когда потребитель получает сообщение. Поэтому я хотел бы либо заменить сообщение, либо даже поставить его в очередь.

Спасибо.

ответ

0

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

+0

Спасибо Дэйв. Я на самом деле пытаюсь убедиться, что в очереди нет дубликатов сообщений, чтобы уменьшить объем обработки, который происходит каждый раз, когда потребитель получает сообщение. Поэтому я хотел бы либо заменить сообщение, либо даже поставить его в очередь. Udi – Udi 2008-10-24 20:08:39

2

Это звучит как идеальный вариант использования для Idempotent Consumer, который удаляет дубликаты из очереди или темы.

В следующем примере показано, как сделать это с Apache Camel, который является самым простым способом реализации любого из Enterprise Integration Patterns, особенно если вы используете ActiveMQ, которые comes with Camel integrated из коробки

from("activemq:queueA"). 
    idempotentConsumer(memoryMessageIdRepository(200)). 
    header("myHeader"). 
    to("activemq:queueB"); 

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

Смежные вопросы