7.2. 关于 PAX-JMS 配置服务
				mvn:org.ops4j.pax.jms/pax-jms-config/1.0.0 捆绑包提供了一个 Managed Service Factory,它具有以下作用:
			
- 跟踪 - org.ops4j.pax.jms.service.ConnectionFactoryonnectionFactoryy OSGi 服务以调用其方法:- public ConnectionFactory createConnectionFactory(Map<String, Object> properties); public XAConnectionFactory createXAConnectionFactory(Map<String, Object> properties); - public ConnectionFactory createConnectionFactory(Map<String, Object> properties); public XAConnectionFactory createXAConnectionFactory(Map<String, Object> properties);- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
						跟踪 org.ops4j.connection factory factory PID,以收集以上方法需要的属性。如果您使用任何可用于 Configuration Admin 服务的方法创建 工厂配置,例如,创建一个${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg文件,您可以执行最后的步骤公开代理特定的连接工厂。
- 
						跟踪 javax.jms.ConnectionFactory和javax.jms.XAConnectionFactory服务,将它们嵌套在 JMS 连接工厂内。
详情在以下主题中:
7.2.1. 为 AMQ 7.1 创建连接工厂
下面是一本例行的、规范、分步指南,用于创建一个对 runc 代理的连接因子。
- 使用 - pax-jms-artemis功能和- pax-jms-config功能安装 FreeIPA 驱动程序:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 工厂配置 : - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查 - pax-jms-config是否处理配置到- javax.jms.ConnectionFactory服务:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果您指定额外的 ROLES 配置,特别是 - protocol=amqp,则将使用 QPID JMS 库,而不是 Environments JMS 客户端。然后,必须使用- amqp://协议用于- jms.url属性。
- 测试连接。
					现在,您有特定于代理(没有池)连接工厂,您可以在需要时注入。例如,您可以使用 jms 功能中的 Karaf 命令:
				
以下列表显示了切换协议时会发生什么:
7.2.2. 为 IBM MQ 8 或 IBM MQ 9 创建连接工厂
					本节演示了如何连接到 IBM MQ 8 和 IBM MQ 9。尽管 pax-jms-ibmmq 安装相关的 pax-jms 捆绑包,但由于许可原因,也不会安装 IBM MQ 驱动程序。
				
- 进入 https://developer.ibm.com/messaging/mq-downloads/
- 登录。
- 点击要安装的版本,例如,点 IBM MQ 8.0 Client 或 IBM MQ 9.0 Client。
- 在底部页面的下载版本表中,点击您想要的版本。
- 
							在下一页中,选择后缀 IBM-MQ-Install-Java-All的最新版本。例如,下载8.0.0.10-WS-MQ-Install-Java-All或9.0.0.4-IBM-MQ-Install-Java-All。
- 提取下载的 JAR 文件的内容。
- 执行 - bundle:install命令。例如,如果您将内容提取到- /home/Downloads目录,则您应该输入以下命令:- `bundle:install -s wrap:file:////home/Downloads/9.0.0.4-IBM-MQ-Install-Java-All/ibmmq9/wmq/JavaSE/com.ibm.mq.allclient.jar`. - `bundle:install -s wrap:file:////home/Downloads/9.0.0.4-IBM-MQ-Install-Java-All/ibmmq9/wmq/JavaSE/com.ibm.mq.allclient.jar`.- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建连接工厂,如下所示: - 安装 - pax-jms-ibmmq:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 创建 工厂配置 : - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 检查 - pax-jms-config是否处理配置为- javax.jms.ConnectionFactory服务:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 测试连接: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
您还可以检查信息是否已从 IBM MQ Explorer 或 web 控制台发送。
7.2.3. 在 Apache Karaf 的 Fuse 中使用 JBoss A-MQ 6.3 客户端
					您可以从 Fuse Software Downloads 页面下载 Fuse 快速入门。
				
					将快速入门 zip 文件的内容提取到本地文件夹,如名为 Quickstart 的文件夹。
				
					您可以将 快速入门/camel/camel-jms 示例作为 OSGi 捆绑包来构建并安装。此捆绑包包含 Camel 路由的蓝图 XML 定义,用于将消息发送到 JBoss A-MQ 6.3 JMS 队列。为 JBoss A-MQ 6.3 代理创建连接工厂的步骤如下:
				
7.2.3.1. 先决条件
- 已安装 Maven 3.3.1 或更高版本。
- 您已在机器上安装了 Red Hat Fuse。
- 您已在机器上安装了 JBoss A-MQ Broker 6.3。
- 您已从客户门户网站下载并提取了 Fuse on visual Quickstart zip 文件。
7.2.3.2. 流程
- 
								进入 快速入门/camel/camel-jms/src/main/resources/OSGI-INF/blueprint/目录。
- 将以下 bean 替换为 - camel-context.xml文件中的 id="jms":- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 通过以下部分实例化 JBoss A-MQ 6.3 连接工厂: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - JBoss A-MQ 6.3 连接工厂配置为连接到侦听 - tcp://localhost:61616的代理。默认情况下,JBoss A-MQ 使用 IP 端口值- 61616。连接工厂也被配置为使用 userName/password 凭证 admin/admin。确保此用户在您的代理 cofiguration 中启用(或者您可以在此处自定义这些设置以匹配代理配置)。
- 
								保存 camel-context.xml文件。
- 构建 - camel-jmsQuickstart:- cd quickstarts/camel/camel-jms mvn install - $ cd quickstarts/camel/camel-jms $ mvn install- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 成功安装 Quickstart 后,导航到 - $FUSE_HOME/目录,再运行以下命令在 Apache Karaf 服务器上启动 Fuse:- ./bin/fuse - $ ./bin/fuse- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 Apache 手册的 Fuse 上安装 - activemq-client功能及- camel-jms功能:- karaf@root()> feature:install activemq-client karaf@root()> feature:install camel-jms - karaf@root()> feature:install activemq-client karaf@root()> feature:install camel-jms- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 安装 - camel-jmsQuickstart 捆绑包:- karaf@root()> install -s mvn:org.jboss.fuse.quickstarts/camel-jms/{$fuseversion}- karaf@root()> install -s mvn:org.jboss.fuse.quickstarts/camel-jms/{$fuseversion}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中,将 - {$fuseversion}替换为您刚才构建的 Maven 工件的实际版本(使用 camel-jms quickstart README 文件)。
- 启动 - JBoss A-MQ 6.3代理(需要安装 JBoss A-MQ 6.3)。打开另一个终端窗口,进入 JBOSS_AMQ_63_INSTALLDIR 目录:- cd JBOSS_AMQ_63_INSTALLDIR ./bin/amq - $ cd JBOSS_AMQ_63_INSTALLDIR $ ./bin/amq- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 
								Camel 路由启动后,您可以在 Fuse 安装中看到一个目录 work/jms/input。将您在此 Quickstart 的src/main/data 目录中找到的文件复制到新创建的work/jms/input目录中。
- 稍等片刻,您将在 - work/jms/output目录下找到由国家组织相同的文件:- order1.xml, order2.xml and order4.xml in work/jms/output/others order3.xml and order5.xml in work/jms/output/us order6.xml in work/jms/output/fr- order1.xml, order2.xml and order4.xml in work/jms/output/others order3.xml and order5.xml in work/jms/output/us order6.xml in work/jms/output/fr- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用 - log:display检查业务日志:- Receiving order order1.xml Sending order order1.xml to another country Done processing order1.xml- Receiving order order1.xml Sending order order1.xml to another country Done processing order1.xml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
7.2.4. 处理的属性摘要
					Configuration Admin factory PID 中的属性传递到相关的 org.ops4j.pax.jms.service.ConnectionFactoryonnectionFactoryy 实施。
				
- ActiveMQ - org.ops4j.pax.jms.activemq.ActiveMQConnectionFactoryFactory(JMS 1.1 only)- 传递给 - org.apache.activemq.ActiveMQConnectionFactory.buildFromMap()方法的属性
- pata - org.ops4j.pax.jms.artemis.ArtemisConnectionFactoryFactory- 如果 - protocol=amqp,则属性将传递给- org.apache.qpid.jms.util.PropertyUtil.setProperties()方法来配置- org.apache.qpid.jms.JmsConnectionFactory实例。- 否则,为 - org.apache.activemq.artemis.utils.uri.BeanSupport.setData()调用,用于- org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory实例。
- IBM MQ - org.ops4j.pax.jms.ibmmq.MQConnectionFactoryFactory- com.ibm.mq.jms.MQConnectionFactory或- com.ibm.mq.jms.MQXAConnectionFactory的 bean 属性被处理。