我有一个应用程序,用作配置的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子。
答案 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示例,这些示例涵盖了容错对以及单实例服务器的发送和接收消息。