Об объединении сообщений

Я задаю простой вопрос относительно JMS, который я реализую через интеграцию Spring и Spring. Но я застрял в одной ситуации, пожалуйста, посоветуйте мне, скажем, я получаю 5000 сообщений в очереди, и я хочу агрегировать в группа из 20 сообщений, а затем переслать ее, означает, что мне нужна какая-то агрегация, которая возьмет 20 сообщений из 5000 сообщений и перешлет эти 20 сообщений. Пожалуйста, посоветуйте, как этого добиться.

Я также проходил этот шаблон..http://www.eaipatterns.com/Aggregator.html


person Tuntun Dffhf    schedule 15.03.2013    source источник
comment
Забудьте о шаблонах. Пожалуйста, определите проблему! В: Что именно вы подразумеваете под агрегатом? Какой критерий определяет, какое сообщение пересылать, а какие отбрасывать? Зачем вообще нужно что-то бросать? Каковы последствия сброса неправильного сообщения? Каковы фактические требования???   -  person paulsm4    schedule 15.03.2013
comment
пожалуйста, сообщите, могу ли я добиться этого и в основной Java ..!   -  person Tuntun Dffhf    schedule 15.03.2013


Ответы (2)


У меня была похожая проблема, и я решил ее, создав счетчик в каждом сообщении с помощью atomicLong.

Затем стратегия выпуска будет выпускать сообщения каждые после X сообщений на основе этого счетчика (хранящегося как заголовок message_id).

    <int:aggregator ...
    release-strategy-expression="size() == ${max.size}"
     correlation-strategy-expression="new java.lang.Double(new java.lang.Double(headers.message_id) / ${max.size}).longValue()"
     />

И эй, это работает.

person josete    schedule 15.03.2013
comment
не могли бы вы опубликовать полный код, который будет очень полезен, заранее спасибо - person Tuntun Dffhf; 15.03.2013
comment
В этом и есть магия.. Кода нет вообще. Как заявляет пользователь mfisher, все, что вам нужно, — это определение xml для стратегии выпуска и стратегии корреляции. Когда выпускать сообщения и как группировать сообщения - person josete; 20.03.2013

Этот раздел справочного руководства Spring Integration должен предоставить всю необходимую информацию: http://static.springsource.org/spring-integration/docs/2.2.x/reference/htmlsingle/#aggregator

По сути, вам нужна стратегия выпуска, которая возвращает true, когда размер группы сообщений достигает 20, и вам нужна стратегия корреляции, которая просто считает, что все сообщения находятся в одной группе (если у вас нет другого индикатора членства в группе).

Надеюсь, это поможет. -Отметка

person mfisher    schedule 15.03.2013