7.2. 关于 PAX-JMS 配置服务
mvn:org.ops4j.pax.jms/pax-jms-config/1.0.0 捆绑包提供了一个 Managed Service Factory,它执行三个操作:
跟踪
org.ops4j.pax.jms.service.ConnectionFactoryFactoryOSGi 服务,以调用其方法: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.connectionfactoryfactory PIDs,以收集以上方法所需的属性。如果您使用可用于 Configuration Admin 服务的任何方法创建 工厂配置,例如,通过创建一个${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg文件,您可以执行最后一步来公开特定于代理的连接工厂。 -
跟踪
javax.jms.ConnectionFactory和javax.jms.XAConnectionFactory服务,将它们嵌套在 JMS 连接工厂内。
详情包括在以下主题中:
7.2.1. 为 AMQ 7.1 创建连接工厂 复制链接链接已复制到粘贴板!
以下是为 Artemis 代理创建连接因素的详细 规范、逐步指南。
使用
pax-jms-artemis功能和pax-jms-config功能安装 Artemis 驱动程序: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 注意如果您指定了额外的 Artemis 配置,特别是
protocol=amqp,则将使用 QPID JMS 库而不是 Artemis 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 文件的内容提取到本地文件夹,例如一个名为 quickstarts 的文件夹。
您可以构建并安装 quickstarts/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。
- 您已从客户门户网站下载并解压缩了 Karaf quickstarts zip 文件中的 Fuse。
7.2.3.2. 流程 复制链接链接已复制到粘贴板!
-
导航到
quickstarts/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。确保此用户已在代理协调中启用(或者您可以在此处自定义这些设置以匹配代理配置)。-
保存
camel-context.xml文件。 构建
camel-jms快速启动:cd quickstarts/camel/camel-jms mvn install
$ cd quickstarts/camel/camel-jms $ mvn installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功安装 Quickstart 后,进入到
$FUSE_HOME/目录,并运行以下命令来在 Apache Karaf 服务器上启动 Fuse:./bin/fuse
$ ./bin/fuseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Apache Karaf 实例的 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-jmsCopy 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 工件的实际版本(consult the 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/amqCopy 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/frorder1.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/frCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
log:display检查业务日志记录:Receiving order order1.xml Sending order order1.xml to another country Done processing order1.xmlReceiving order order1.xml Sending order order1.xml to another country Done processing order1.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.4. 处理的属性摘要 复制链接链接已复制到粘贴板!
Configuration Admin factory PID 中的属性传递到相关的 org.ops4j.pax.jms.service.ConnectionFactoryFactory 实现。
ActiveMQ
org.ops4j.pax.jms.activemq.ActiveMQConnectionFactoryFactory(JMS 1.1 only)传递给
org.apache.activemq.ActiveMQConnectionFactory.buildFromMap ()方法的属性artemis
org.ops4j.pax.jms.artemis.ArtemisConnectionFactoryFactory如果
protocol=amqp,属性将传递到org.apache.qpid.jms.util.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 属性。