jms - EMS 连接适用于“tcp”,但不适用于“tibjmsnaming”
问题描述
我得到了一个 Tibco EMS 连接 URL“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”时是否遗漏了一些东西(例如,在牺牲安全性方面)。
解决方案
“tcp://”或“ssl://”前缀是连接到 TIBCO EMS 服务器的 JMS 功能的正确方法。所以如果你使用 TibjmsConnectionFactory,那就对了。
然而,JMS 中的另一种方法是通过 JNDI 实现的名称使用 JMS ConnectionFactory。要访问 TIBCO EMS 的 JNDI 存储库,请使用“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);
推荐阅读
- firebase - 带有 Vuex 的 Firebase/Nuxt 模块使用身份验证中间件存储数据:为什么用户对象显示为空?
- python - ASPOSE 幻灯片 AMAZON Lambda 蟒蛇
- laravel - Laravel 代客和子域
- vue.js - Web Worker 中的 AWS SDK V3 S3Client 引发 ReferenceError:未定义窗口
- node.js - 部署到 Vercel - 我们可以部署在节点服务器中服务的 React 应用程序吗?
- google-chrome-devtools - 有没有办法在 google Devtools 控制台中获取所有上下文 ID 的列表?
- apache - Bitnami Drupal 与 apache + nginx 是海市蜃楼?
- c# - 是否可以同时从同一个 ASP.NET Core 服务运行两个 HostBuilder?
- r - 保留条形图中缺失列的位置而不引入零
- kubernetes - Kubernetes Kafka 到 Zookeeper - “ZooKeeperClientTimeoutException”错误