草庐IT

栈和队列

全部标签

java - JMS 队列上多线程消息处理的最佳实践

我目前正在将JMS支持添加到类似应用程序服务器的框架中。JMS将由HornetQ(独立代理,服务器类路径上的hornetqjar)实现,但既没有JBoss,也没有spring,也没有其他任何可以提供MDB的东西。下一步是将消息监听器添加到xa队列,以允许并行处理传入消息。有些消息会启动长时间运行的任务,因此基本思想是从onMessage方法生成工作线程。在漫长的互联网旅程中,我遇到了thisdiscussion,其中一位参与者提到,他不会这样做,而是使用一个额外的内部队列来完成任务:然后(单线程)消息监听器将简单地从入站队列中获取消息并为内部队列创建新消息,其中在该内部队列的另一端,一

java - 更改 ThreadPoolExecutor 的队列大小

我需要能够更改ThreadPoolExecutor任务队列的大小.当然,BlockingQueue不支持改变大小,ThreadPoolExecutor也不支持改变队列。所以,我想出的方法是使用ThreadPoolExecutor.shutdownNow(),这会返回一个尚未执行的Runnable列表。然后我可以创建一个具有所需队列大小的新执行程序并重新提交所有任务。问题在于调用shutdownNow()时正在进行的任务。据我从javadoc中得知,执行程序将在当前执行任务的所有线程上调用Thread.interrupt()。我不希望我的任务被杀死。这个问题可能是询问如何编写我的任务以使

java - 如何以编程方式报告 AWT/Swing 事件队列长度?

理想情况下,答案将与平台无关,但特定于平台(尤其是OracleJVM)也很有用。我正在处理的项目仍在运行版本6JVM。特殊需求与不时“卡住”的GUI有关。我很清楚在EDT上进行GUI工作。该程序在Windows上运行良好,但在转移到Linux后,这些“奇怪”的GUI问题开始发生。实际上,这个问题已经发生在两个应用程序上,都是在从Windows迁移到Linux之后。JVisualVM显示超过1000万个java.awt.EventQueueItem对象。怀疑是AWT队列的增长速度超过了它在Linux上的服务速度,因此我们的想法是在应用程序上放置一个AWT队列长度指示器,并查看它在队列增长

Java:一个去重的延时队列

大家好,我有一个系统(源)需要在某些对象发生变化时异步通知另一个系统(目标)。不同之处在于,源系统可能会在短时间内多次改变单个对象(更新非常“突发”),在这种情况下,理想的情况是只通知目标系统一次,并通知目标系统的最终状态对象。我的想法是为此在ThreadPoolExecutor之前使用某种时间延迟的重复数据删除队列。这个队列将:将项目保留在队列中的时间最短(理想情况下配置为比典型突变爆发的持续时间稍长)如果重复项(由对象的标识符定义)入队,则替换现有对象。然而,该项目应该保留其在队列中的原始位置(以避免任何一个项目永远被撞到队列的后面-在某些时候我们需要发送通知,即使另一个项目会暂时

java - AWS us-east 中基于 Java 的应用程序的托管消息队列?

我正在寻找一个消息队列即服务,它........托管在AWSus-east..提供真正的PubSub(不是轮询!)..可用于生产..提供高可用性..有一个很好的Java客户端我只找到了CloudAMQP(仍处于测试阶段),AppEngineTaskQueue(不是AWS),SQS(仅轮询),RedisToGo(没有高可用性?-twitter流似乎充满问题)和IronMQ(仅轮询)。我错过了什么? 最佳答案 您应该检查一种可用的开放式PaaS(例如Cloudify、OpenShift或Cloudfoundry),使用此类PaaS可以轻

java - 队列<整数> q = new LinkedList<整数>()

这里是ananswerto"HowdoIinstantiateaQueueobjectinjava?",Queueisaninterface.Youcan'tinstantiateaninterfacedirectlyexceptviaananonymousinnerclass.Typicallythisisn'twhatyouwanttodoforacollection.Instead,chooseanexistingimplementation.Forexample:Queueq=newLinkedList();orQueueq=newArrayDeque();Typicallyy

java - JMS/HornetQ = 如何从客户端以编程方式创建 JMS 队列?

我知道可以通过hornetq-jmx.xml配置文件在HornetQ中创建JMS队列。但我想从客户端执行此操作?我试过:HornetQJMSClient.createQueue(queueName);但这似乎没有创建队列(在hornetq服务器上)?当我尝试为此队列创建消费者时,我总是会收到一个队列未知的异常。如果能提供有关如何从客户端创建JMS队列的建议,我将不胜感激。(我根本不想在客户端或服务器上使用JNDI,如果可能的话)。更新:我不介意使用任何HornetQs核心API(与JMSAPI相对)从客户端创建队列。我的问题是:是否有任何方法可以从客户端创建队列(使用JMSApis或使

java - 循环消息/任务队列现有解决方案

考虑有一组有限的任务必须在特定时间段内完成(也在该时间段内均匀分布),然后一次又一次地重复。如果是一个本地工作线程/线程,我们只需做这样的事情(对伪代码感到抱歉):longinterval=period/tasks.sizewhile(true){for(taskintasks){task.do()sleep(interval)}}现在我想以分布式方式与多个独立工作人员一起执行此操作。对于这种情况,是否有一些已知的最佳实践解决方案(最好来自Java世界)?循环消息队列?分布式任务锁?我用google安静地搜索了一下,但看不到任何开箱即用的优雅解决方案。 最佳

java - 您能否在 Java 嵌入式代理中以编程方式更改队列的 "dead letter"处理?

背景在高层次上,我有一个Java应用程序,其中某些事件应触发要为当前用户执行的特定操作。但是,事件可能很频繁,Action总是一样的。因此,当第一个事件发生时,我想安排在不久的将来某个时间点(例如5分钟)采取行动。在那个时间窗口内,后续事件不应该采取任何行动,因为应用程序看到已经安排了一个行动。一旦预定的Action执行,我们就回到第1步,下一个事件再次开始循环。我的想法是通过在应用程序本身中嵌入一个内存中的ActiveMQ实例来实现这种过滤和限制机制(我不关心队列持久性)。我相信JMS2.0支持这种延迟传递的概念,延迟的消息位于“暂存队列”中,直到传递到真正的目的地为止。但是,我也相

java - 使用 Spring Cloud Stream 将 RabbitMQ 消费者绑定(bind)到现有队列

我使用RabbitMQ网络用户界面创建了一个主题交换TX并绑定(bind)到交换两个队列TX.Q1和TX.Q2,每个都与路由键rk1和rk2相应地绑定(bind),并向交换生成少量消息。现在我想使用SpringCloudStream创建一个消费者,它只会从Q1获取消息。我尝试使用配置:spring.cloud.stream.bindings.input.destination=TXspring.cloud.stream.bindings.input.group=Q1以及消费消息的方法的注解@StreamListner(Sink.INPUT)。结果我可以看到消费者创建了一个同名队列(或绑