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 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 手册的 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 工件的实际版本(使用 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.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.MQConnectionFactoryFactorycom.ibm.mq.jms.MQConnectionFactory或com.ibm.mq.jms.MQXAConnectionFactory的 bean 属性被处理。