ActiveMQ messageId не работает, чтобы остановить дублирование - PullRequest
0 голосов
/ 08 апреля 2020

Я использую ActiveMQ для обмена сообщениями, и существует одно требование, что если сообщение дублируется, оно должно обрабатываться AMQ автоматически Для этого я генерирую уникальный ключ сообщения и устанавливаю messageprocessor. следующий код:

jmsTemplate.convertAndSend(dataQueue, event, messagePostProccessor -> {

    LocalDateTime dt = LocalDateTime.now();
    long ms = dt.get(ChronoField.MILLI_OF_DAY) / 1000;
    String messageUniqueId = event.getResource() + event.getEntityId() + ms;
    System.out.println("messageUniqueId : " + messageUniqueId);
    messagePostProccessor.setJMSMessageID(messageUniqueId);
    messagePostProccessor.setJMSCorrelationID(messageUniqueId);
    return messagePostProccessor;
});

Как видно, код генерирует уникальный идентификатор и затем устанавливает его в messagepostproccessor.

Может мне помочь в этом, есть ли какая-либо другая конфигурация, которую мне нужно сделать.

1 Ответ

1 голос
/ 08 апреля 2020

Потребитель может получать дубликаты сообщений в основном по двум причинам: производитель отправлял одно и то же сообщение чаще или потребитель получал одно и то же сообщение чаще.

Apache ActiveMQ Artemis включает в себя мощный автомат c обнаружение дублирующихся сообщений , отфильтровывающие сообщения, отправленные производителем несколько раз.

Чтобы не дать потребителю получать одно и то же сообщение еще раз, должен быть реализован идемпотентный потребитель, ie Apache Camel предоставляет потребительский компонент Idempotent, который будет работать с любым провайдером JMS, см .: http://camel.apache.org/idempotent-consumer.html

...