当前使用WebLogic和分布式队列。我从文档中了解到,分布式队列允许您通过使用全局JNDI名称检索到集群中任何队列的连接。似乎分布式队列为您提供的主要功能之一是跨多个受控服务器的负载平衡连接。因此,我们有4个受控服务器(每个物理上有两个,通过多播通信),每个受控服务器都有一个单独的JMS服务器,该服务器被配置到它自己的数据存储。
我99%确定我已经知道这个问题的答案,但是似乎如果你想从一个队列中消费一个消息,并且该队列存在于集群中的每个Mgd服务器上,那么从技术上讲,你不能从任何队列中拉出一条消息(你只能从你所连接的队列中拉出消息)。因此,如果我在Mgd服务器4上有一条消息,并且我连接到Mgd服务器1,我将看不到来自Mgd服务器4的队列中的消息。
那么,在Java或WLS中,有没有一种方法可以使用来自队列(跨集群)的所有节点的消息。比如查看每个Mgd服务器上队列的每个实例?它看起来不是这样的,文档表明这似乎是不可能的,就像这个视频(大约5分钟)一样:
http://www.youtube.com/watch?v=HAKixK_wp0Q
发布于 2013-02-22 01:53:34
当您的客户端连接到同一集群中的另一台受控服务器时,您不能使用传递到另一台受控服务器的消息。
下面是它的工作原理。使用UDT时,wls提供一个JNDI名称,该名称可在内部为每个受控服务器解析为4个不同的JNDI名称,每个受控服务器上的JMS服务器是不同的。当您在发布消息时使用UDQ JNDI名称时,它将使用您选择的算法和在连接工厂中完成的其他配置到达4个受控服务器中的一个。
当消息使用者侦听UDQ时,它被固定到其中一个受控服务器上的JMS服务器。它对其他服务器中的消息没有可见性。
通常,UDQ用于希望消息由多个受控服务器并发使用的场景。您通常会将MDB部署到集群,这意味着MDB将被部署到每个受控服务器,并且每个受控服务器都将能够使用来自其本地JMS服务器的消息。
发布于 2013-02-21 08:46:21
如果您的消息库配置为使用数据库,我相信您可以这样做。如果是这样,那么我认为从队列中删除一个项目就会将其从共享数据库表中删除。即所有JMS服务器都指向相同的数据库实例和表。这应该也很容易测试。
https://stackoverflow.com/questions/14987012
复制相似问题