当第一个tibco服务器关闭时,客户端应用程序无法连接到第二个tibco服务器

时间:2019-01-08 08:48:46

标签: jms tibco

我有一个应用程序,用作配置的tibco服务器的侦听器。 我的要求是,我应该在我的应用程序中定义2台tibco服务器,如果其中一台服务器出现故障,则应用程序应将自身连接到第二台配置的服务器。 同样,我做了如下所述的更改:

<prop key="java.naming.provider.url">tibjmsnaming://${SHARED_TIBCOEMS_HOST}:${SHARED_TIBCOEMS_SSL_PORT},tibjmsnaming://${SHARED_TIBCOEMS_FAILOVER_HOST}:${SHARED_TIBCOEMS_FAILOVER_SSL_PORT}</prop>

其中SHARED_TIBCOEMS_HOST,TIBCOEMS_SSL_PORT,SHARED_TIBCOEMS_FAILOVER_HOST和SHARED_TIBCOEMS_FAILOVER_SSL_PORT的值来自属性文件。

下面提到的代码段用于创建连接:

    public void init() throws JMSException { 
ConnectionFactory connectionFactory = (QueueConnectionFactory)initConnectionFactory(connectionParameters);

            session = connection.createSession(TRANSACTIONS_ENABLED, Session.AUTO_ACKNOWLEDGE);
            DestinationResolver destinationResolver = new DynamicDestinationResolver();
            Destination destination = destinationResolver.resolveDestinationName(session, connectionParameters.destination, false);
            messageProducer = session.createProducer(destination);
        }

我发现使用m子可以达到相同的效果。但是我的应用程序不应该使用m子。

1 个答案:

答案 0 :(得分:1)

我不确定是什么问题,因为您的问题并未真正说明问题,但是要连接到TIBCO EMS,通常可以采取两个步骤

1)执行JNDI查找以获取要连接的服务器地址(如果您已经知道确切的地址,则这是可选的) 2)连接到服务器并开始发送消息

对于步骤1,TIBCO EMS documentation(第401页至第403页)提供了有关如何在Java中执行此操作的很好概述:

Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.tibco.tibjms.naming.TibjmsInitialContextFactory");
env.put(Context.PROVIDER_URL, "tibjmsnaming://jmshost:7222,
tibjmsnaming://backuphost:7222");
env.put(Context.URL_PKG_PREFIXES, "com.tibco.tibjms.naming")
env.put(TibjmsContext.SECURITY_PROTOCOL, "ssl");
env.put(TibjmsContext.SSL_ENABLE_VERIFY_HOST,
new Boolean("false"));
Context context = new InitialContext(env);

您可以从该上下文对象开始发送消息,这就是您所要求的URL所在的位置(以 tibjmsnaming 开头)。

对于第2步,或者如果您已经具有解析为要向其发送消息的JMS服务器的URL,则将需要以下内容:

    String serverURL = "tcp://server1,tcp://server2"
    ConnectionFactory factory = new com.tibco.tibjms.TibjmsConnectionFactory(serverUrl);
    connection = factory.createConnection(userName, password);
    session = connection.createSession(javax.jms.Session.AUTO_ACKNOWLEDGE);
    destination = session.createTopic(topicName);
    msgProducer = session.createProducer(null);
    msg = session.createTextMessage();
    msg.setText(messageStr);
    msgProducer.send(destination, msg);

如果我没记错的话,TIBCO EMS安装附带了一堆非常好的Java示例,这些示例涵盖了容错对以及单实例服务器的发送和接收消息。