Соединение EMS работает с "tcp", но не с "tibjmsnaming"

Мне дали URL соединения Tibco EMS "tibjmsnaming://xx.xx.xx.xxx:7551,tibjmsnaming://xx.xx.xx.xxx:7551" (IP-адрес здесь маскируется). Когда я пытался подключиться с помощью JMS, как это:

ConnectionFactory factory = new TibjmsConnectionFactory("tibjmsnaming://xx.xx.xx.xxx:7551,tibjmsnaming://xx.xx.xx.xxx:7551");
Connection connection = factory.createConnection("test", "abcd");

Я получил исключение:

javax.jms.JMSException: Protocol not supported

Однако, если я изменю "tibjmsnaming" на "tcp", как показано ниже, соединение будет успешным.

ConnectionFactory factory = new TibjmsConnectionFactory("tcp://xx.xx.xx.xxx:7551,tcp://xx.xx.xx.xxx:7551");
Connection connection = factory.createConnection("test", "abcd");

Так как я могу соединиться с "tcp", я, вероятно, могу оставить это так. Но я хотел бы знать, не пропускаю ли я что-то при переходе от "tibjmsnaming" к "tcp" (например, с точки зрения ущерба безопасности).

1 ответ

Префикс "tcp://" или "ssl://" является правильным способом подключения к функции JMS сервера TIBCO EMS. Так что, если вы используете TibjmsConnectionFactory, это правильно.

Однако альтернативным способом в JMS является JMS ConnectionFactory по имени из реализации JNDI. И для доступа к JNDI-репозиторию TIBCO EMS используйте префикс "tibjmsnaming://". Ниже приведен пример загрузки фабрики с именем "ConnectionFactory". Преимущество этого кода в том, что он не зависит от реализации.

        // provider-specific code
        String providerContextFactory = "com.tibco.tibjms.naming.TibjmsInitialContextFactory";
        String providerUrl = "tibjmsnaming://localhost:51515";
        String cfName = "ConnectionFactory";

        // JMS generic code
        Hashtable<String,String> env = new Hashtable<String,String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, providerContextFactory);
        env.put(Context.PROVIDER_URL, providerUrl);

        if (userName != null) {
           env.put(Context.SECURITY_PRINCIPAL, userName);
           if (password != null)
              env.put(Context.SECURITY_CREDENTIALS, password);
        }

        InitialContext jndiContext = new InitialContext(env);

        ConnectionFactory factory = (ConnectionFactory)jndiContext.lookup(cfName);
Другие вопросы по тегам