ActiveMQ: как переупорядочить сообщения в очереди с пользовательским свойством - PullRequest
0 голосов
/ 29 февраля 2020

Мы используем ActiveMQ в нашем проекте, и сообщения записываются в ActiveMQ различными производителями в одну и ту же очередь одновременно. Следовательно, порядок перепутан. есть ли в любом случае, что сообщения могут быть переупорядочены в очереди, прежде чем потребляться потребителем (ями)

Например, производитель А создал сообщения -> M1, M2, M3 (со свойством пользовательского заголовка как 1, 2, 3) производитель B создал сообщения -> M4, M5, M6 (с пользовательским свойством заголовка как 4, 5, 6).

Из-за условия гонки мы получаем сообщения в очередь как M1, M4, M5 , M2, M3, M6.

Можем ли мы переупорядочить сообщения в нужной последовательности, например: M1, M2, M3, M4, M5, M6, используя настраиваемое свойство заголовка?

Примечание. не используется Java в нашем проекте. Мы используем Mulesoft для производства и приема сообщений в ActiveMQ и из них.

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

1 Ответ

0 голосов
/ 29 февраля 2020

Если нет способа гарантировать, что сообщения отправляются в правильном порядке, то тогда Повторная последовательность верблюдов является хорошим решением. Вот простой пример:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="activemq:queue:unordered"/>
    <resequence>
      <simple>in.header.seqnum</simple>
      <to uri="activemq:queue:ordered" />
      <stream-config capacity="5000" timeout="4000"/>
    </resequence>
  </route>
</camelContext>

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

Документация Camel довольно тщательна, поэтому вам следует обратиться к ней за дополнительной информацией.

...