ActiveMQ STOMP и DLQ - PullRequest
       95

ActiveMQ STOMP и DLQ

0 голосов
/ 25 апреля 2020

У меня есть простой Nodejs потребитель (использующий библиотеку: "@ stomp / stomp js": "^ 5.0.2") очереди ActiveMQ, которая выглядит так:

const client = new Client({
    brokerURL: `ws://127.0.0.1:61614/ws`,
    ...
})

client.onConnect = (frame) => {
    client.subscribe(queueName, message => {
        console.log(`[${new Date()}] Received message [${message}]`)
        process.exit(1)
    }, { ack: 'client-individual', 'activemq.prefetchSize': '1' })
}

Я пытаюсь заставить DLQ работать, но я не успешен. Моя конфигурация брокера выглядит следующим образом:

...
    <broker>
    ...
            <destinationPolicy>
            <policyMap>
                <policyEntries>
                    <policyEntry gcInactiveDestinations="true" inactiveTimoutBeforeGC="600000" queue="&gt;" prioritizedMessages="true">
                        <deadLetterStrategy>
                            <sharedDeadLetterStrategy processNonPersistent="true">
                            </sharedDeadLetterStrategy>
                        </deadLetterStrategy>
                    </policyEntry>
                </policyEntries>
            </policyMap>
        </destinationPolicy>
        <plugins>
            <redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
                <redeliveryPolicyMap>
                    <redeliveryPolicyMap>
                        <defaultEntry>
                            <redeliveryPolicy initialRedeliveryDelay="5000" maximumRedeliveries="5" redeliveryDelay="10000"/>
                        </defaultEntry>
                    </redeliveryPolicyMap>
                </redeliveryPolicyMap>
            </redeliveryPlugin>
        </plugins>

    </broker>

Это сообщение доставляется снова и снова. После просмотра исходного кода active-mq у меня сложилось впечатление, что RedeliveryPlugin используется только после подтверждения, то есть только клиент может заставить сообщение помещаться в DLQ. Как я могу решить проблему, показанную в тривиальном примере, например, когда указанное сообщение c приводит к тому, что cra sh потребителя и потребитель не имеют возможности уведомить брокера.

Я бы реализовал nack на стороне потребителя, но проблема это я не нашел, как получить доступ к JMSXDeliveryCount свойство через Stomp (https://activemq.apache.org/activemq-message-properties).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...