Клиентское приложение не может подключиться ко второму серверу Tibco, когда первый сервер Tibco не работает - PullRequest
0 голосов
/ 08 января 2019

У меня есть приложение, которое действует как прослушиватель настроенного сервера 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);
        }

Я обнаружил, что мы можем достичь того же, используя мула. Но мое приложение не должно использовать мул.

1 Ответ

0 голосов
/ 08 января 2019

Я не совсем уверен, в чем заключалась проблема, поскольку ваш вопрос на самом деле не указывает это, но для подключения к TIBCO EMS вы обычно можете сделать два шага

1) Выполните поиск JNDI, чтобы получить адрес сервера, к которому вы хотите подключиться (это необязательно, если вы уже знаете точный адрес) 2) Подключитесь к серверу и начните отправлять сообщения

Для шага 1 документация TIBCO EMS (страницы с 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, или если у вас уже есть URL-адреса, которые разрешают доступ к JMS-серверам, на которые вы хотите отправлять сообщения, вам потребуется что-то вроде:

    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, которые охватывают как отправку и получение сообщений для пар отказоустойчивости, так и для серверов с одним экземпляром.

...