热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用java和spring3.0从JMS主题(而不是队列)同时处理多个消息?

请注意,我希望多个消息侦听器同时处理来自主题的连续消息.此外,我希望每个消息监听器都以事务方式运行,以便给定消息监听器中的处理失败将导致该监听器的消息保留在该主题上.Spring

请注意,我希望多个消息侦听器同时处理来自主题的连续消息.此外,我希望每个消息监听器都以事务方式运行,以便给定消息监听器中的处理失败将导致该监听器的消息保留在该主题上.

Spring DefaultMessageListenerContainer似乎只支持JMS队列的并发性.

我是否需要实例化多个DefaultMessageListenerContainers?

如果时间沿垂直轴向下流动:

ListenerA reads msg 1 ListenerB reads msg 2 ListenerC reads msg 3
ListenerA reads msg 4 ListenerB reads msg 5 ListenerC reads msg 6
ListenerA reads msg 7 ListenerB reads msg 8 ListenerC reads msg 9
ListenerA reads msg 10 ListenerB reads msg 11 ListenerC reads msg 12
...

更新:
感谢您的反馈@ T.Rob和@skaffman.

我最后要做的是创建多个DefaultMessageListenerContainers,其中cOncurrency= 1,然后将逻辑放在消息监听器中,这样只有一个线程可以处理给定的消息ID.

解决方法:

您不需要多个DefaultMessageListenerContainer实例,但是您需要使用concurrentConsumers property将DefaultMessageListenerContainer配置为并发:

Specify the number of concurrent

consumers to create. Default is 1.

Specifying a higher value for this

setting will increase the standard

level of scheduled concurrent

consumers at runtime: This is

effectively the minimum number of

concurrent consumers which will be

scheduled at any given time. This is a

static setting; for dynamic scaling,

consider specifying the

“maxConcurrentConsumers” setting

instead.

Raising the number of concurrent

consumers is recommendable in order to

scale the consumption of messages

coming in from a queue. However, note

that any ordering guarantees are lost

once multiple consumers are

registered. In general, stick with 1

consumer for low-volume queues.

然而,底部有一个很大的警告:

Do not raise the number of concurrent consumers for a topic.

This would lead to concurrent

consumption of the same message, which

is hardly ever desirable.

这很有意思,当你想到它时就有意义了.如果您有多个DefaultMessageListenerContainer实例,则会发生相同的情况.

我想也许你需要重新考虑你的设计,虽然我不确定我的建议.同时消费发布/订阅消息似乎是一件非常合理的事情,但是如何避免同时向所有消费者传递相同的消息?


推荐阅读
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 本文探讨了Python类型注解使用率低下的原因,主要归结于历史背景和投资回报率(ROI)的考量。文章不仅分析了类型注解的实际效用,还回顾了Python类型注解的发展历程。 ... [详细]
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
author-avatar
叫我师大神
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有