Java Spring TaskExecutor中等效的ActiveMQ消息组
抽象是否有任何等价物?其思想是,当使用来自消息队列(利用消息组的ActiveMQ)的消息时,将按顺序执行消息处理任务(处理来自消息组的消息的任务不会在处理来自该组的消息的前一个任务尚未完成之前启动) 一种选择是放弃TaskExecutor(在我的例子中是ThreadPoolTaskExecutor)并使用固定数量的工作线程,每个工作线程直接从MQ消耗,但是这会失去ThreadPoolTaskExecutor提供的执行灵活性,因此我不敢这么做Java Spring TaskExecutor中等效的ActiveMQ消息组,java,spring,Java,Spring,抽象是否有任何等价物?其思想是,当使用来自消息队列(利用消息组的ActiveMQ)的消息时,将按顺序执行消息处理任务(处理来自消息组的消息的任务不会在处理来自该组的消息的前一个任务尚未完成之前启动) 一种选择是放弃TaskExecutor(在我的例子中是ThreadPoolTaskExecutor)并使用固定数量的工作线程,每个工作线程直接从MQ消耗,但是这会失去ThreadPoolTaskExecutor提供的执行灵活性,因此我不敢这么做 乍一看,在春季似乎没有这样的功能,但是我不相信我是第一
乍一看,在春季似乎没有这样的功能,但是我不相信我是第一个偶然发现这种问题的人,而且以前没有解决过。欢迎任何见解:)简单回答-不,没有。TaskExecutor只是线程池的抽象,因此不知道线程之间的路由。根据您想要控制事情的具体方式,您是否考虑过在中编写一个简单的路由来控制消息到线程的路由?我不知道任何类似于ActiveMq的东西可以与Spring TaskExecutor一起使用 您的要求 其思想是,当使用来自消息队列的消息时 利用消息组的ActiveMQ),然后执行消息 处理任务将按顺序执行(处理任务 来自消息组的消息不会在上一个任务之前启动 处理来自该组的邮件尚未完成。“ 我的建议: 您指定的需求可以在简单Java中执行而不会遇到任何问题 您可以使用数据库中的一个简单表创建一个虚拟队列,并使用自定义查询以您需要的方式生成内容 当数据存在于数据库中时,您可以执行所有操作,如获取相似的数据、重用数据等。一旦实现这些简单步骤,您使用ActiveMQ执行的所有操作都可以在没有太多开销的情况下完成
HashMap
,如下所示,其中key作为分组值,而className
的arraylist
作为值
public static final HashMap<Key, List<ClassName>> map= new HashMap<Key, List<ClassName>>();
4现在,对于每个键,您将获得一个类ClassName
的ArrayList
,其中包含所有具有该键的类
这将像DB一样工作。在本例中,您将无法基于多个值设置条件。但任何事情都可以根据您的要求进行修改 乍一看,Camel选项似乎至少和我当前的“解决方案”一样“硬连线”…另一个数据库依赖关系恐怕是我负担不起的。使用静态hashMap实现同样的事情将很容易,并且不需要另一个表。!!我一直都在努力避免自己用所有可能的陷阱来实现这一点。我有点希望这样的事情已经完成了。@Manjabes这绝对是一个解决方案,但我不熟悉任何满足此要求的软件包。!!Spring集成具有聚合相关消息的功能。我知道,与任务不太一样。我实际上不需要聚合,只需要排序……排序……)
if(map.containsKey(className.getId())){
map.get(className.getId()).add(className);
}
else{
List<ClassName> lstClass= new ArrayList<ClassName>();
lstClass.add(className);
map.put(className.getId(), lstClass);
}