目前正在使用WebLogic和分布式队列。我从文档中了解到,分布式队列允许您使用全局JNDI名称检索到群集中任何队列的连接。它似乎是Distributed Queue为您提供的主要功能之一,它是跨多个托管服务器的负载平衡连接。因此,我们有4个受管服务器(每个物理上有两个,通过多播进行通信),每个受管服务器都有一个单独的JMS服务器,该服务器配置为它自己的数据存储。
我99%肯定我已经知道了这个问题的答案,但是看起来如果你想从队列中消费消息,并且群集中的每个Mgd服务器上存在该队列,那么你无法从技术上拉a任何队列的消息(您只能将消息从您所连接的队列中拉出)。因此,如果我在Mgd Server 4上有一条消息,并且我连接到Mgd Server 1,我将看不到来自Mgd Server 4的队列中的消息。
Java EE或WLS中是否有一种方法可以使用来自队列的所有节点(跨群集)的消息。就像每个Mgd服务器上每个Queue实例的视图一样?它似乎不是这样,文档使它看起来像这是不可能的,以及这个视频(大约5分钟):
答案 0 :(得分:3)
当您的客户端连接到同一群集的另一个受管服务器时,不能使用传递给一个受管服务器的消息。
这是它的工作原理。 使用UDT时,wls提供了一个JNDI名称,该名称在内部为每个受管服务器解析为4个不同的JNDI名称,每个受管服务器上的JMS服务器都是不同的。 在发布消息时使用UDQ JNDI名称时,它将使用您选择的算法和连接工厂中完成的其他配置到达4个受管服务器之一。
当消息使用者收听UDQ时,它会被固定到其中一个托管服务器上的JMS服务器。它无法看到其他服务器中的消息。
通常,UDQ用于您希望多个受管服务器同时使用该消息的情况。您通常会将MDB部署到群集,这意味着MDB将部署到每个受管服务器,并且每个MDB都能够使用来自其本地JMS服务器的消息。
答案 1 :(得分:0)
我相信如果您的邮件存储配置为使用数据库,则可以。如果是这样,那么我认为从队列中删除一个项目会将其从共享数据库表中删除。即所有JMS服务器都指向同一个数据库实例和表。这也应该很容易测试。