8.5. 连接到服务器
如果要将客户端连接到服务器,您必须有一个正确的连接器。有两种方法可以做到这一点。您可以使用服务器上配置的 ConnectionFactory,可通过 JNDI 查找获取。或者,也可以使用 ActiveMQ Artemis 核心 API,并在客户端上配置整个 ConnectionFactory。
8.5.1. JMS 连接事实 复制链接链接已复制到粘贴板!
客户端可以使用 JNDI 来查找提供服务器连接的 ConnectionFactory 对象。连接事实可以公开三种连接器类型中的每种类型:
远程客户端可以使用 引用 remote-connector 的连接事实来向服务器发送消息或从服务器接收消息(假设 connection-factory 具有适当的导出的条目)。远程连接器与 绑定使用 socket-binding 关联,该connection-factory 在哪里连接来告知客户端。
引用 in- vm-connector 的连接事实适合供本地客户端用于向本地服务器发送消息或接收消息。in-vm-connector 与 server-id 关联,后者使用 connection-factory 进行连接的位置告知客户端,因为多个消息传递服务器可以在单个 JVM 中运行。
在升级到消息传递协议之前,引用 事实适合供远程客户端用于通过连接到服务器的 HTTP 端口来发送消息或从服务器接收消息。http-connector 的连接http-connector 与代表 HTTP 套接字的 socket-binding 关联,默认为 http。
自 JMS 2.0 起,默认的 JMS 连接工厂可供 Java EE 应用访问,其位于 JNDI 名称 java:comp/DefaultJMSConnectionFactory 下。messaging-activemq 子系统定义一个 pooled-connection-factory,用于提供此默认连接工厂。
以下是 JBoss EAP 完整 配置配置文件中所含的默认连接器和连接工厂:
<subsystem xmlns="urn:jboss:domain:messaging-activemq:4.0">
<server name="default">
[...]
<http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor" />
<http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
<param name="batch-delay" value="50"/>
</http-connector>
<in-vm-connector name="in-vm" server-id="0"/>
[...]
<connection-factory name="InVmConnectionFactory" connectors="in-vm" entries="java:/ConnectionFactory" />
<pooled-connection-factory name="activemq-ra" transaction="xa" connectors="in-vm" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory"/>
[...]
</server>
</subsystem>
工厂的 entries 属性指定将工厂公开的 JNDI 名称。只有 java:jboss/exported 命名空间内绑定的 JNDI 名称可用于远程客户端。如果 connection-factory 在 java:jboss/exported 命名空间中绑定了条目,远程客户端将在 java:jboss/exported 之后使用文本查找 connection-factory。例如,RemoteConnectionFactory 默认绑定到 java:jboss/exported/jms/RemoteConnectionFactory,这意味着远程客户端将使用 jms/RemoteConnectionFactory 来查找此连接事实。pooled-connection-factory 应当不会在 java:jboss/exported 命名空间内绑定任何条目,因为 pooled-connection-factory 不适合于远程客户端。