具有集群节点的JMS

具有集群节点的JMS,jms,weblogic,Jms,Weblogic,我有两个在Weblogic上运行的集群托管服务器,每个托管服务器上分别运行着JMSServer1和server2。问题是在应用程序属性文件中,我们仅硬编码并将jmsserver1jndi名称传递给应用程序。因此,在每个节点上运行的两个应用程序实际上只使用一个固定的JMS服务器,这不是真正的分布式和集群化。如果JMS服务器1关闭,则整个应用程序都将关闭 我的问题是如何让应用程序在上面的senario中动态地找到JMS服务器?你能给我指个方向吗?谢谢 在Weblogic文档中: 基本上,您创建了一个

我有两个在Weblogic上运行的集群托管服务器,每个托管服务器上分别运行着
JMSServer1和server2。问题是在应用程序属性文件中,我们仅硬编码并将
jmsserver1jndi名称
传递给应用程序。因此,在每个节点上运行的两个应用程序实际上只使用一个固定的JMS服务器,这不是真正的分布式和集群化。如果JMS服务器1关闭,则整个应用程序都将关闭


我的问题是如何让应用程序在上面的senario中动态地找到JMS服务器?你能给我指个方向吗?谢谢

在Weblogic文档中:

基本上,您创建了一个以逗号分隔的服务器列表,当其中一台服务器停机时,JMS连接逻辑应该能够自动处理这种情况:

e、 g


当您使用诸如jms.jndi.provider.url=t3://hostA:31122、hostA:31124之类的属性时
它告诉wls连接到主机A:31122或主机A:31124。 注意,您的JMS客户机在任何给定时间都只连接到一台主机。 当您关闭hostA时,JMS客户端和服务器之间的连接会突然中断,导致异常,您的代码必须优雅地处理此异常,并定期尝试再次连接到WLS,以确保它连接到hostB

如果JMS客户机的多个实例正在运行,WLS将在内部对请求进行循环

当使用MDB作为JMS客户机并将其部署到集群并使用这样的url时,1个MDB实例将连接到一个主机,另一个实例将连接到另一个主机。MDB本身还具有定期重新连接到JMS目标的能力

解决问题的一个简单方法是 1) 设置jms.jndi.provider.url=t3://hostA:31122,hostA:31124 2) 运行两个JMS客户机代码实例,一个连接到端口31122,另一个连接到端口31124
3) 在JMS队列上设置转发延迟,以便消息不会在队列中停留很长时间而不会被占用,并被转发到另一个具有活动使用者的队列。

我在此处更新我的进度,而不是添加更多注释。通过将JMS提供程序的属性文件从
t3://hostA:7001
更改为
t3://hostA:7001,hostB:7001
,我已经使用独立的JMS客户端进行了测试。故障切换由WLS自动处理。没有代码更改。我在上面看到的异常是由使用wlclient.jar引起的,它在更改为wlfullclient.jar后工作

我随后生成了wlfullclient.jar


谢谢大家

我可以澄清一下,使用这个逗号分隔的服务器列表,应用程序代码根本不需要更改吗?正确-t3/t3s协议应该可以为您处理它。我已经将非web独立应用程序的属性文件更改为jms.jndi.provider.url=t3://hostA:31122,hostA:31124。当主机A和B都在运行时,应用程序运行正常,但当我关闭主机A时,应用程序出现异常,原因是:org.omg.CORBA.COMM_故障:vmcid:SUN次要代码:203 completed:No at com.SUN.CORBA.se.impl.logging.ORBUtilSystemException.writeErrorSend(ORBUtilSystemException.java:2259),我错过了什么吗?关于故障切换,它仍然应该自动发生。参考:关于新的错误,您是否看到了以下内容:最后一条评论,针对您的例外情况提出一个新问题比继续在这里发表评论要好(提出一个新问题是完全可以的)对不起,我在最后一条评论中犯了一个错误(更改了错误的属性文件)。实际上,当我将jms.jndi.provider.url=t3://hostA:31122更改为jms.jndi.provider.url=t3://hostA:31122,hostA:31124时,应用程序从未工作过,并且得到了“org.omg.CORBA.COMM_FAILURE:vmcid:SUN minor code:203 completed:No”。我在类路径上看到了wlclient.jar,我应该改用wlfullclient.jar吗?我们没有使用均匀分布队列,转发延迟在正常队列上仍然有效吗?谢谢如果两个客户端连接到同一个服务器(例如hostA),会怎么样?如果有jms.jndi.provider.url=t3://hostA:31122,hostA:31124,那么它不应该关心服务器。它应该发现来自这两个节点的消息,而不仅仅是来自客户端连接到的节点的消息。
t3://hostA:7001,hostB:7001