Java 如何在WebLogic 12c中使用远程JMS提供程序

Java 如何在WebLogic 12c中使用远程JMS提供程序,java,jakarta-ee,jms,weblogic,weblogic12c,Java,Jakarta Ee,Jms,Weblogic,Weblogic12c,我正在阅读有关与远程JMS提供程序集成的内容。远程JMS提供者指的是由不同域中的另一个WebLogic集群托管的JMS服务器 FAQ很旧,没有详细介绍如何实际配置远程JMS连接。以下是常见问题解答的一部分 我需要什么信息来建立与远程JMS提供者的通信 A.您需要以下信息来设置与远程JMS提供商的通信: 目标类型,无论远程JMS目标是队列还是主题。 远程JMS目标的JNDI名称。 对于持久主题订阅服务器,指定唯一标识它们的连接id和订阅服务器id名称。消息驱动EJB根据EJB名称为这些值提供默认值

我正在阅读有关与远程JMS提供程序集成的内容。远程JMS提供者指的是由不同域中的另一个WebLogic集群托管的JMS服务器

FAQ很旧,没有详细介绍如何实际配置远程JMS连接。以下是常见问题解答的一部分

我需要什么信息来建立与远程JMS提供者的通信

A.您需要以下信息来设置与远程JMS提供商的通信:

目标类型,无论远程JMS目标是队列还是主题。 远程JMS目标的JNDI名称。 对于持久主题订阅服务器,指定唯一标识它们的连接id和订阅服务器id名称。消息驱动EJB根据EJB名称为这些值提供默认值。 对于非WebLogic远程JMS提供程序 初始上下文工厂类名—远程JMS提供程序的JNDI查找服务的java类名。 包含远程JMS提供程序的JMS客户端和JNDI客户端库的java JAR的文件位置。确保在本地JVM的类路径中指定了这些JAR。 远程提供程序的JNDI服务的URL。对于WebLogic服务器,URL的格式通常为t3://hostaddress:port。如果您是通过HTTP进行隧道传输,请以HTTP而不是t3开始URL。访问与应用程序位于同一WebLogic服务器或WebLogic群集上的WebLogic JMS服务器的服务器应用程序代码不需要URL。 远程提供程序的JMS连接工厂的JNDI名称。此连接工厂必须存在于远程提供程序上,而不是本地提供程序上。 如果JMS应用程序需要事务,则连接工厂必须支持XA。WebLogic文档将支持XA的工厂称为启用用户事务的工厂

默认情况下,WebLogic服务器自动提供三个不可配置的连接工厂:

weblogic.jms.ConnectionFactory—不支持XA的工厂。 weblogic.jms.XAConnectionFactory—一个支持XA的工厂 weblogic.jms.MessageDrivenBanConnectionFactory—一个支持XA的工厂,用于消息驱动EJB。 必须显式配置其他WebLogic JMS连接工厂

因此,基本思想是从远程服务器的JNDI上下文检索JMS资源,并将其存储在本地JNDI上下文中


对我来说,做JNDI映射似乎是老生常谈。2018年与远程WebLogic 12c JMS提供商集成的现代方式是什么?或者JNDI映射仍然相关,我在哪里可以找到更多关于它的信息?

有3种方法可以连接到远程JMS服务器 1) 使用外部JMS(即JNDI映射) 2) 使用消息传递桥(适配器位老式) 3) 使用SAF(存储和转发)

如果与远程JMS的连接是可靠的,或者本地和远程JMS服务器的可用性是相同的,那么外部JMS是一个很好且简单的选择


如果您不能依赖远程JMS服务器的可用性,并且希望在消息到达后立即使用消息,并让本地服务器在适当的时候处理消息,那么建议使用SAF

连接到远程JMS服务器有3种方法 1) 使用外部JMS(即JNDI映射) 2) 使用消息传递桥(适配器位老式) 3) 使用SAF(存储和转发)

如果与远程JMS的连接是可靠的,或者本地和远程JMS服务器的可用性是相同的,那么外部JMS是一个很好且简单的选择


如果您不能依赖远程JMS服务器的可用性,并且希望在消息到达后立即使用消息,并让本地服务器在适当的时候处理消息,那么建议使用SAF

我使用了外部JNDI提供者来访问本地应用程序中的远程服务器JMS资源,并且工作正常。但是,如何使用集群远程域和分布式JMS实现这一点呢?我认为外部JNDI链接将成为单点故障,因为它以具有物理地址的单个远程服务器实例为目标。如果源是群集的,那么您将使用群集感知JNDI url,它将是t3://acme1、acme2、acme3:7001或t3://acme1、acme2,acme3:7001I使用了外部JNDI提供程序来访问本地应用程序中的远程服务器JMS资源,并且工作正常。但是,如何使用集群远程域和分布式JMS实现这一点呢?我认为外部JNDI链接将成为单点故障,因为它以具有物理地址的单个远程服务器实例为目标。如果源是群集的,那么您将使用群集感知JNDI url,它将是t3://acme1、acme2、acme3:7001或t3://acme1、acme2、acme3:7001