【问题标题】:Regarding aggregating messages关于聚合消息
【发布时间】:2013-03-03 18:18:53
【问题描述】:

我问一个关于 JMS 的简单问题,我正在通过 spring 集成和 spring 实现,但是我遇到了一种情况,请告诉我,假设我在队列中收到 5000 条消息,我想聚合成一组 20 条消息然后转发它,这意味着我想要某种聚合,它将从 5000 条消息中提取 20 条消息并转发这 20 条消息,请告知如何实现这一点。

我也经历过这种模式..http://www.eaipatterns.com/Aggregator.html

【问题讨论】:

  • 忘记“模式”。请定义问题!问:您所说的“聚合”究竟是什么意思?什么标准决定要转发哪些消息,以及要丢弃哪些消息?为什么你需要丢弃任何东西?丢弃“错误”消息的后果是什么? 实际的“要求”是什么???
  • 请告知我是否也可以在核心 java 中实现这一点..!

标签: java jms spring-integration spring-jms


【解决方案1】:

Spring Integration 参考手册的这一部分应该提供您需要的所有信息: http://static.springsource.org/spring-integration/docs/2.2.x/reference/htmlsingle/#aggregator

基本上,您想要一个在消息组大小达到 20 时返回 true 的发布策略,并且您想要一个简单地考虑所有消息都在同一个组中的相关性策略(除非您确实有其他组成员身份的指标)。

希望对您有所帮助。 -马克

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我解决了这个问题,并使用 atomicLong 在每条消息中创建了一个计数器。

    然后,发布策略将根据该计数器(存储为 message_id 标头)每隔 X 条消息释放消息

        <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()"
         />
    

    嘿,它有效。

    【讨论】:

    • 能否请您发布完整的代码,这将是一个很大的帮助,谢谢提前
    • 这就是魔法.. 根本没有代码。正如用户 mfisher 所说,您所需要的只是发布策略和关联策略的 xml 定义。何时发布消息以及如何对消息进行分组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多