尽管我有一个非独占队列,但我注意到消息会根据连接时间以循环方式传递给消费者。我正在使用 JCSMP 并将 EndpointProperties 设置为 ACCESSTYPE_NONEXCLUSIVE。
这是我的测试方法:
(1) 在启动任何消息消费者之前,我将第一批 20 条消息发送到队列。
(2) 我启动 Consumer 1 处理消息,每条消息延迟 2 秒。
(3) 接下来,当消费者 1 正在消费第一批消息时,我启动消费者 2。尽管消费者 2 正在运行,但它处于空闲状态,因为来自第一批的消息没有传递给它。
(4) 我发送了第二批 20 条消息。来自第二批的这些消息以循环方式传递给消费者 1 和消费者 2。
(5) 当消费者 1 正在处理来自第一批和第二批的消息,而消费者 2 正在处理来自第二批的消息时,我启动消费者 3。虽然消费者 3 正在运行,但它处于空闲状态,因为没有来自第一批和第二批的消息传递给它。
(6) 我发送了第三批 20 条消息。来自第三批的这些消息以循环方式传递给消费者 1、消费者 2 和消费者 3。
我期望无论消息何时存储在队列中,当我启动任何消费者时,都应该将消息传递给他们。这很重要,这样如果消息堆积在队列中,我可以启动更多消费者来清除积压。但是,根据我的实验,它似乎不起作用。我是否错过了某处的任何设置?
感谢您的建议。谢谢你。