有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JMS 1.1:PointtoPoint模式的负载共享客户端

我正在研究的带有JMS 1.1(TibcoJms 4.4.1)的遗留系统在服务器端建立了一个JMS队列(不是主题),用于PTP通信模式。服务器会不断地将消息项放入队列中

我想在上实现的是在客户端通过多个线程轮询这些数据。每个线程都应该处理具有特定属性值的消息

我想有一种方法可以做到这一点,那就是在队列上实现一个MessageListener,它充当一个“开关”,将接收到的消息分发(推送)到客户端的每个线程进行处理。 或者,我可以在服务器上实现一个MessageListener,监听该队列,并将收到的消息放到客户端的一个新队列中,每个线程都会对客户端队列进行轮询

无论哪种方式,我想我都需要在客户端使用一组额外的数据结构,在线程之间共享

我的问题是,是否有一种更直接的方法涉及客户端处理器线程和服务器上的队列之间的直接通信,类似于一个主题的多个订阅者(尽管每个订阅者实际上并不“共享负载”,而是获得相同的负载。这对我来说是可以接受的)

在这种情况下,有没有什么好的常见做法可以推荐


共 (1) 个答案

  1. # 1 楼答案

    直接连接的概念取决于JMS实现的实际编码方式。酒吧酒吧间或点对点之间没有什么本质上更直接的联系。这确实取决于实施

    添加要使用的api选项。如果您有多个线程,那么考虑这些是否是中断驱动的,那么可以使用每个选择器的多个消息侦听器。或者,用户可以使用选择器再次进行同步接收

    但是请记住,JMS提供者不是数据库,所以大量使用选择器是个坏主意。它们只是没有所有属性的索引。如果这是一个问题,您将需要一个本地分发数据结构

    根据你所说的,我不确定酒吧子模式是否有用。听起来每个安装消息应该只有一个消费者收到