来自集群中分布式队列的所有JMSs消息

来自集群中分布式队列的所有JMSs消息,jms,weblogic,Jms,Weblogic,目前正在使用WebLogic和分布式队列。我从文档中了解到,分布式队列允许您使用全局JNDI名称检索到跨集群的任何队列的连接。分布式队列提供的主要功能之一似乎是跨多个托管服务器的负载平衡连接。因此,我们有4个托管服务器(每个物理服务器上有两个,通过多播进行通信),每个托管服务器都有一个单独的JMS服务器,配置为自己的数据存储 我99%确定我已经知道了这个问题的答案,但如果您想从队列中提取消息,并且该队列存在于集群中的每个Mgd服务器上,那么从技术上讲,您无法从任何队列中提取消息(您只能从连接到的

目前正在使用WebLogic和分布式队列。我从文档中了解到,分布式队列允许您使用全局JNDI名称检索到跨集群的任何队列的连接。分布式队列提供的主要功能之一似乎是跨多个托管服务器的负载平衡连接。因此,我们有4个托管服务器(每个物理服务器上有两个,通过多播进行通信),每个托管服务器都有一个单独的JMS服务器,配置为自己的数据存储

我99%确定我已经知道了这个问题的答案,但如果您想从队列中提取消息,并且该队列存在于集群中的每个Mgd服务器上,那么从技术上讲,您无法从任何队列中提取消息(您只能从连接到的队列中提取消息)。因此,如果我在MGDServer4上有一条消息,并且我连接到MGDServer1,我将看不到队列中来自MGDServer4的消息

那么,在JavaEE或WLS中有没有一种方法可以使用来自队列(整个集群)所有节点的消息呢。是否希望查看每个Mgd服务器上队列的每个实例?看起来不是这样,文档让人觉得这是不可能的,就像这段视频(大约5分钟):


如果您的邮件存储配置为使用数据库,我相信您可以。如果是这样的话,那么我认为从队列中删除一个项目会将其从共享db表中删除。也就是说,所有JMS服务器都指向同一个db实例和表。这也应该很容易测试。

不,当您的客户端连接到同一集群的另一个托管服务器时,您不能使用传递到一个托管服务器的消息

下面是它的工作原理。 当使用UDT时,wls提供一个JNDI名称,该名称在内部解析为每个托管服务器的4个不同JNDI名称,每个托管服务器上的JMS服务器都是不同的。 当您发布消息时使用UDQJNDI名称时,它将使用您选择的算法和连接工厂中完成的其他配置到达4个托管服务器之一

当消息使用者侦听UDQ时,它被固定到其中一个托管服务器上的JMS服务器。它无法查看其他服务器中的消息

通常,UDQ用于希望多个托管服务器同时使用消息的场景。您通常会将MDB部署到集群,这意味着MDB将部署到每个托管服务器,并且每个托管服务器都能够使用来自本地JMS服务器的消息