我正在研究的遗留系统JMS 1.1(TibcoJms 4.4.1)在服务器端建立了一个JMS队列(非主题),用于PTP通信模式。消息项将由服务器不断放入队列。
我想要实现的是通过客户端的多个线程轮询这些数据。每个线程都应该处理具有特定属性值的消息。
我可以这样做的一种方法,我想是实现一个MessageListener监听该队列,该队列作为一个'交换机'将收到的消息(PUSH)分发给客户端的每个线程进行处理。 或者我可以实现一个MessageListener,监听服务器上的那个队列,并将收到的消息放在客户端的新队列上,每个线程将POLL对着客户端队列。
无论哪种方式,我认为我需要在线程之间共享的客户端上使用一组额外的数据结构。
我的问题是关于是否存在更直接的方法,涉及客户端处理器线程与服务器上的该队列之间的直接通信,类似于主题的多个订户(尽管每个订户实际上并没有分担负载,而是获得相同的负载。我的目的是可以接受的。
在这种情况下,有没有人可以提出一些好的常见做法?
答案 0 :(得分:2)
直接连接的概念取决于JMS实现的实际编码方式。 pub sub或point to point的任何内容本质上都是更直接的连接。它确实取决于实施。
添加到您选择使用的api。如果你有多个线程,那么考虑这些是否是中断驱动的,因此可以使用多个带有选择器的消息监听器。或者,用户使用选择器再次同步接收。
请记住,虽然JMS提供程序不是数据库,但选择器的广泛用户是个坏主意。他们只是没有所有属性的索引。如果这是一个问题,您将需要一个本地分布数据结构。
根据您所说的不确定pub子模型有帮助。听起来只有一个消费者应该得到每个安装消息。