Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写JMS代理?_Java_Jms_Messagebroker_Broker - Fatal编程技术网

Java 如何编写JMS代理?

Java 如何编写JMS代理?,java,jms,messagebroker,broker,Java,Jms,Messagebroker,Broker,关于代理,Java消息服务是如何工作的?我看到了创建生产者和消费者客户机的教程和示例,但我不理解如何将代理与JMS结合起来。例如,我看到有一个ActiveMQ,人们可以很容易地使用一个类来实现代理,但是看起来我还必须在我的客户机中使用ActiveMQ方法来建立到代理的连接,而不是使用纯JMS方法?JMS API本质上是一个客户机API。它定义了客户端用来与代理交互的API。如果实现的行为符合JMS规范,那么代理的实现方式完全是任意的。这使那些正在实现JMS代理的人有足够的自由来以适合他们自己的需

关于代理,Java消息服务是如何工作的?我看到了创建生产者和消费者客户机的教程和示例,但我不理解如何将代理与JMS结合起来。例如,我看到有一个ActiveMQ,人们可以很容易地使用一个类来实现代理,但是看起来我还必须在我的客户机中使用ActiveMQ方法来建立到代理的连接,而不是使用纯JMS方法?

JMS API本质上是一个客户机API。它定义了客户端用来与代理交互的API。如果实现的行为符合JMS规范,那么代理的实现方式完全是任意的。这使那些正在实现JMS代理的人有足够的自由来以适合他们自己的需求和约束的方式实现它。这还意味着,jmsapi没有定义创建和配置代理实例(不管是什么代理)

此外,JMS规范建立了一种约定,即客户机能够在JNDI中找到他们的“管理对象”(即连接工厂和目的地)。JMS 2规范第5.1节规定:

尽管受管对象的接口并不明确依赖于 在JNDI上,JMS建立了JMS客户机查找它们的约定 使用JNDI在名称空间中查找它们

由于这种约定,大多数JMS提供程序还提供一个JNDI实现,与JMS实现一起使用。ActiveMQ通过
org.apache.ActiveMQ.jndi.ActiveMQInitialContextFactory
类提供此功能。此JNDI实现的使用和配置将在中进一步讨论

由于使用JNDI只是一种约定,大多数JMS提供程序都有访问管理对象的替代方法。例如,ActiveMQ允许您使用ActiveMQ特定的类以编程方式实例化连接工厂或目标

要将JMS客户机连接到其相应的代理,首先需要决定是使用JNDI还是使用特定于提供者的机制。一般来说,JNDI是首选方法,因为它是可插拔的(使用应用程序类路径上
JNDI.properties
文件中定义的属性),这使得在需要时更容易在JMS代理之间切换。一旦做出了决定,那么您将获得一个
javax.jms.ConnectionFactory
的实例,并使用该实例创建
javax.jms.Connection
,等等。在这一点之后,有很多关于如何编写jms客户机的教程和文档


最终,当连接到ActiveMQ时,在客户端应用程序中不需要严格使用JMS和JNDI API以外的任何东西。

JMS API本质上是客户端API。它定义了客户端用来与代理交互的API。如果实现的行为符合JMS规范,那么代理的实现方式完全是任意的。这使那些正在实现JMS代理的人有足够的自由来以适合他们自己的需求和约束的方式实现它。这还意味着,jmsapi没有定义创建和配置代理实例(不管是什么代理)

此外,JMS规范建立了一种约定,即客户机能够在JNDI中找到他们的“管理对象”(即连接工厂和目的地)。JMS 2规范第5.1节规定:

尽管受管对象的接口并不明确依赖于 在JNDI上,JMS建立了JMS客户机查找它们的约定 使用JNDI在名称空间中查找它们

由于这种约定,大多数JMS提供程序还提供一个JNDI实现,与JMS实现一起使用。ActiveMQ通过
org.apache.ActiveMQ.jndi.ActiveMQInitialContextFactory
类提供此功能。此JNDI实现的使用和配置将在中进一步讨论

由于使用JNDI只是一种约定,大多数JMS提供程序都有访问管理对象的替代方法。例如,ActiveMQ允许您使用ActiveMQ特定的类以编程方式实例化连接工厂或目标

要将JMS客户机连接到其相应的代理,首先需要决定是使用JNDI还是使用特定于提供者的机制。一般来说,JNDI是首选方法,因为它是可插拔的(使用应用程序类路径上
JNDI.properties
文件中定义的属性),这使得在需要时更容易在JMS代理之间切换。一旦做出了决定,那么您将获得一个
javax.jms.ConnectionFactory
的实例,并使用该实例创建
javax.jms.Connection
,等等。在这一点之后,有很多关于如何编写jms客户机的教程和文档


最终,当连接到ActiveMQ时,在客户端应用程序中不需要严格使用JMS和JNDI API以外的任何东西。

@JustinBertram感谢您的建议。我试图缩短我关于使用纯JMS APi构建代理与仅使用ActiveMQ的区别的请求。通过ActiveMQ,我了解了如何编写代理,但不是使用纯JMS,或者我可能不了解一些基本原理?@JustinBertram感谢您的建议。我试图缩短我关于使用纯JMS APi构建代理与仅使用ActiveMQ的区别的请求。通过ActiveMQ,我了解了如何编写代理,但不是使用纯JMS,或者我可能不了解一些基本原理?通过反复阅读您的答案,我了解了通信过程。我感谢你在回答问题时所付出的努力。这样我就明白了回答我最初的问题是多么复杂。对于我的理解,我错过了什么:如何在纯JMS中实现这样的代理?你能把这些信息添加到你的帖子里吗?你能澄清一下“impleme”是什么意思吗