我正在使用的Weblogic应用程序服务器是群集的。我有一个JMS队列,它有一个JNDI名称。当消费者查找jndi名称并在队列上发布事件时,它是否会在两个应用程序服务器中创建的队列中发布?两台服务器上都将运行相同的MDB - 哪一台将消息发布到队列中?如果我需要删除放在队列中的消息,我应该遍历所有节点并删除消息吗?
感谢。
答案 0 :(得分:0)
使用队列意味着消息保证完全消费。这意味着,消息将被传递到两个节点,但它只会被其中一个节点全局处理一次。 WebLogic处理群集中节点之间的同步和协调,以同时保证传递,但确保在全局范围内只处理一次。
这与某个主题形成对比,每个订阅者都会获得该消息的副本。每个订阅者将处理一次消息。
您不需要遍历节点来删除消息...只需获取队列的jndi引用并在消费者消费之前删除该消息。
答案 1 :(得分:0)
您没有说明您在Weblogic中为此创建的队列类型。对于集群环境,最好使用DistributedQueue,而不是标准Queue。我相信它允许Weblogic更好地处理当集群中的一个节点发生故障时如何处理队列中的消息。还可以选择查看队列的内容并从Weblogic Admin Console中删除消息。