在 Azure 逻辑应用中从工作流连接到 IBM MQ 服务器

适用范围:Azure 逻辑应用(消耗型 + 标准型)

本文介绍如何使用 MQ 连接器从 Azure 逻辑应用中的工作流访问 Azure 托管服务器或本地 MQ 服务器。 然后,你便可以创建自动化工作流来接收和发送存储在 MQ 服务器中的消息。 例如,工作流可以浏览队列中的单条消息,然后运行其他操作。

MQ 连接器提供 Microsoft MQ 客户端的包装器,其中包括所有用于通过 TCP/IP 网络来与远程 MQ 服务器通信的消息传递功能。 此连接器定义了用于调用 MQ 客户端的连接、操作和参数。

支持的 IBM WebSphere MQ 版本

  • MQ 7.5
  • MQ 8.0
  • MQ 9.0、9.1、9.2 和 9.3

连接器技术参考

MQ 连接器有不同的版本,具体取决于逻辑应用类型和主机环境

逻辑应用 环境 连接版本
消耗 多租户 Azure 逻辑应用 托管连接器,显示在设计器中的“企业”标签下。 此连接器仅提供操作,而不提供触发器。 在本地 MQ 服务器方案中,托管连接器支持使用 TLS (SSL) 加密进行仅限服务器的身份验证。

有关详细信息,请查看以下文档:

- MQ 托管连接器参考
- Azure 逻辑应用中的托管连接器
标准 单租户 Azure 逻辑应用和应用服务环境 v3(仅限具有 Windows 计划的 ASE v3) 托管连接器显示在连接器库中的“运行时”>“共享”下,而内置连接器显示在连接器库中的“运行时”>“应用内”下,并且基于服务提供商。 内置版本在以下方面有所不同:

- 内置版本包括操作和触发器。

- 内置连接器可以直接连接到 MQ 服务器,并通过使用连接字符串访问 Azure 虚拟网络,而无需本地数据网关。

- 内置版本支持服务器身份验证和服务器客户端身份验证以及用于传输中数据的 TLS (SSL) 加密、用于发送和接收操作的消息编码以及 Azure 虚拟网络集成。

有关详细信息,请查看以下文档:

- MQ 托管连接器参考
- MQ 内置连接器参考
- Azure 逻辑应用中的内置连接器

使用 TLS (SSL) 加密进行身份验证

根据你使用的是 MQ 托管连接器(消耗或标准工作流)还是 MQ 内置连接器(仅限标准工作流),MQ 连接器支持以下一种或两种身份验证方向:

身份验证 支持的逻辑应用类型和 MQ 连接器 进程
仅限服务器
(单向)
- 消耗:仅限托管

- 标准:托管或内置
对于服务器身份验证,MQ 服务器会将私钥证书(公众信任或非公众信任的证书)发送到逻辑应用客户端进行验证。 MQ 连接器使用标准 .NET SSL 流验证,根据公钥证书(也称为“签名者”证书)验证传入服务器证书的真实性。

逻辑应用不会发送客户端证书。
服务器-客户端
(双向)
- 消耗:不支持

- 标准:仅限内置
对于服务器身份验证,请参阅上一行。

对于客户端身份验证,逻辑应用客户端会将私钥证书发送到 MQ 服务器进行验证。 MQ 服务器还会使用公钥证书来验证传入客户端证书的真实性。

有关私钥和公钥证书的说明

  • 需要验证的证书始终是私钥证书。 用于执行验证的证书始终是公钥证书。

  • 公众信任的私钥证书由公认的证书颁发机构颁发。 非公众信任的私钥证书包括自签名的专用 CA 和类似证书。

  • 为了验证从 MQ 服务器发送的私钥证书,MQ 连接器将使用公钥证书,这些证书通常位于逻辑应用的虚拟机主机上的受信任根证书颁发机构 (CA) 存储中。

    但是,如果主机没有所有必需的公钥证书,或者如果 MQ 服务器发送非公众信任的私钥证书,则你需要执行额外的步骤。 有关详细信息,请参阅先决条件

  • 为了验证从标准逻辑应用发送的客户端私钥证书,MQ 服务器将使用 MQ 服务器证书存储中的公钥证书。 若要为逻辑应用添加用作客户端证书的私钥证书,请参阅添加私钥证书

限制

  • 使用 TLS (SSL) 加密进行身份验证

    MQ 连接器 支持的身份验证方向
    托管 仅限服务器(单向)
    内置 - 服务器-客户端(双向)
    - 仅限服务器(单向)
  • 服务器证书验证

    MQ 内置连接器不会验证服务器证书的过期日期和证书链。

  • 字符集转换

    • MQ 托管连接器既不执行任何字符集转换,也不使用消息的 Format 字段。 该连接器只会复制消息字段中显示的任何数据,并将其连同消息一起发送。

    • MQ 内置连接器可以执行字符集转换,但仅当数据格式为字符串时才执行转换。 如果你提供不同的字符集 ID(代码页),该连接器会尝试将数据转换为新的代码页。

  • MQ 连接器不支持分段消息。

有关详细信息,请参阅 MQ 托管连接器参考MQ 内置连接器参考

先决条件

  • Azure 帐户和订阅。 如果没有 Azure 订阅,请注册试用版 Azure 订阅

  • 若要连接本地 MQ 服务器,必须在网络中的某个服务器上安装本地数据网关。 要使 MQ 连接器正常工作,使用本地数据网关的服务器还需要安装 .NET Framework 4.6。

    安装网关后,还需要在 Azure 中创建数据网关资源。 MQ 连接器使用此资源来访问 MQ 服务器。 有关详细信息,请查看设置数据网关连接

    注意

    下列情况无需网关:

    • MQ 服务器公开可用或在 Azure 中可用。
    • 你将使用 MQ 内置连接器,而不使用托管连接器。
  • 要在其中访问 MQ 服务器的逻辑应用资源和工作流。

    • 若要将 MQ 托管连接器与本地数据网关一起使用,逻辑应用资源必须使用与 Azure 中的网关资源相同的位置。

    • 若要使用不提供任何触发器的 MQ 托管连接器,请确保你的工作流通过触发器启动,或者你需要首先将一个触发器添加到工作流。 例如,可以使用定期触发器

    • 若要使用 MQ 内置连接器中的触发器,请确保从空白工作流开始。

  • 使用 TLS (SSL) 加密进行身份验证所要满足的证书要求

  • 密码规范要求

    MQ 服务器要求为使用 TLS (SSL) 加密的连接定义密码规范。 此密码规范必须与运行 MQ 服务器的操作系统支持的、已选择的并使用的密码套件相匹配。 最终,客户端连接使用的密码规范必须与 MQ 服务器中的服务器连接通道上设置的密码套件相匹配。

    有关详细信息,请参阅连接和身份验证问题

添加 MQ 触发器(仅限标准逻辑应用)

以下步骤仅适用于标准逻辑应用工作流,此类工作流可以使用 MQ 内置连接器提供的触发器。 MQ 托管连接器不包含任何触发器。

以下步骤使用 Azure 门户,但利用适当的 Azure 逻辑应用扩展,你也可以使用 Visual Studio Code 来创建标准逻辑应用工作流。

  1. Azure 门户中,在设计器中打开空白逻辑应用工作流。

  2. 按照这些常规步骤添加所需的 MQ 内置触发器。 有关详细信息,请参阅 MQ 内置连接器触发器

  3. 提供验证连接所需的信息。 完成操作后,选择“创建”。

  4. 出现触发器信息框时,提供触发器所需的信息

  5. 完成后,保存工作流。 在设计器工具栏上选择“保存”。

添加 MQ 操作

消耗逻辑应用工作流只能使用 MQ 托管连接器。 但是,标准逻辑应用工作流可以使用 MQ 托管连接器和 MQ 内置连接器。 每个版本都有多个操作。 例如,托管连接器和内置连接器版本都可以通过其自己的操作来浏览消息。

  • 托管连接器操作:这些操作在消耗型或标准型逻辑应用工作流中运行。

  • 内置连接器操作:这些操作仅在标准型逻辑应用工作流中运行。

以下步骤使用 Azure 门户,但利用适当的 Azure 逻辑应用扩展,也可以使用以下工具来创建逻辑应用工作流:

  1. Azure 门户中,在设计器中打开逻辑应用。

  2. 按照这些常规步骤添加所需的 MQ 操作。 有关详细信息,请参阅 MQ 连接器操作

  3. 提供验证连接所需的信息。 完成操作后,选择“创建”。

  4. 出现操作信息框时,提供操作所需的信息

  5. 完成后,保存工作流。 在设计器工具栏上选择“保存”。

测试工作流

若要检查工作流是否返回期望的结果,请运行工作流,然后查看工作流的运行历史记录中的输出。

  1. 运行工作流。

    • 消耗逻辑应用:在工作流设计器工具栏上,选择“运行触发器”>“运行”。

    • 标准逻辑应用:在工作流资源菜单上,选择“概述”。 在“概述”窗格工具栏上,选择“运行触发器”>“运行”。

    运行完成后,设计器会显示工作流的运行历史记录以及每个步骤的状态。

  2. 若要查看已运行(未跳过)的每个步骤的输入和输出,请展开或选择该步骤。

    • 若要查看更多输入详细信息,请选择“显示原始输入”。

    • 若要查看更多输出详细信息,请选择“显示原始输出”。 如果将 IncludeInfo 设置为 true,则会包含更多输出。

查看和添加用于使用 TLS (SSL) 加密进行身份验证的证书

以下信息仅适用于使用 TLS (SSL) 加密进行仅限服务器或服务器-客户端身份验证的 MQ 内置连接器的标准逻辑应用工作流。

查看并确认现有公钥证书的指纹

若要检查所需公钥证书的指纹是否存在于标准逻辑应用虚拟机主机上的受信任根 CA 存储中,请按照以下步骤从标准逻辑应用的资源菜单运行 cert PowerShell 脚本

  1. Azure 门户中,打开你的标准逻辑应用资源。 在逻辑应用资源菜单中的“开发工具”下,选择“高级工具”>“转到”。

  2. 在 Kudu“调试控制台”菜单中,选择“PowerShell”。

  3. PowerShell 窗口出现后,在 PowerShell 命令提示符下运行以下脚本:

    dir cert:\localmachine\root

    PowerShell 窗口将列出现有指纹和说明,例如:

    Screenshot showing existing example thumbprints and descriptions.

添加公钥证书

若要将公钥证书添加到运行标准逻辑应用的虚拟机主机上的受信任根 CA 存储中,请执行以下步骤:

  1. Azure 门户中,打开你的标准逻辑应用资源。 在逻辑应用资源菜单中的“设置”下,选择“TLS/SSL 设置(经典)”。

  2. 在“TLS/SSL 设置(经典)”页上选择“公钥证书(.cer)”选项卡,然后选择“上传公钥证书”。

  3. 在打开的“添加公钥证书(.cer)”窗格中,输入用于描述该证书的名称。 查找并选择公钥证书文件 (.cer)。 完成后,选择“上传”。

  4. 添加证书后,从“指纹”列中复制证书的指纹值。

    Screenshot showing the Azure portal and Standard logic resource with the following items selected: 'TLS/SSL settings (classic)', 'Public Key Certificates (.cer)', and 'Upload Public Key Certificate'.

  5. 在逻辑应用资源菜单中选择“配置”。

  6. 在“应用程序设置”选项卡上,选择“新建应用程序设置” 。 添加名为 WEBSITE_LOAD_ROOT_CERTIFICATES 的新应用程序设置,并输入之前复制的证书指纹值。 如果有多个证书指纹值,请务必用逗号 (,) 分隔每个值。

    有关详细信息,请参阅在单租户 Azure 逻辑应用中编辑标准逻辑应用的主机和应用设置

    备注

    如果你指定专用 CA 证书的指纹,则 MQ 内置连接器不会运行任何证书验证,例如检查证书的过期日期或源。 如果标准 .NET SSL 验证失败,则连接器只会将传入的任何指纹值与 WEBSITE_LOAD_ROOT_CERTIFICATES 设置中的值进行比较。

  7. 如果添加的证书未显示在公钥证书列表中,请在工具栏上选择“刷新”。

添加私钥证书

若要将私钥证书添加到运行标准逻辑应用的虚拟机主机上的受信任根 CA 存储中,请执行以下步骤:

  1. Azure 门户中,打开你的逻辑应用资源。 在逻辑应用资源菜单中的“设置”下,选择“TLS/SSL 设置(经典)”。

  2. 在“TLS/SSL 设置(经典)”页上选择“私钥证书(.pfx)”选项卡,然后选择“上传证书”。

  3. 在打开的“添加私钥证书(.pfx)”窗格中,查找并选择私钥证书文件 (.pfx),然后输入证书密码。 完成后,选择“上传”。

  4. 添加证书后,从“指纹”列中复制证书的指纹值。

    Screenshot showing the Azure portal and Standard logic resource with the following items selected: 'TLS/SSL settings (classic)', 'Private Key Certificates (.pfx)', and 'Upload Certificate'.

  5. 在逻辑应用资源菜单中选择“配置”。

  6. 在“应用程序设置”选项卡上,选择“新建应用程序设置” 。 添加名为 WEBSITE_LOAD_CERTIFICATES 的新应用程序设置,并输入之前复制的证书指纹值。

    有关详细信息,请参阅在单租户 Azure 逻辑应用中编辑标准逻辑应用的主机和应用设置

  7. 如果添加的证书未显示在私钥证书列表中,请在工具栏上选择“刷新”。

  8. 使用 MQ 内置连接器创建连接时,请在连接信息框中选择“使用 TLS”。

  9. 在“客户端证书指纹”属性中,输入之前复制的私钥证书指纹值,这会启用服务器-客户端(双向)身份验证。 如果你不输入指纹值,则连接器将使用仅限服务器(单向)身份验证。

    Screenshot showing Standard logic app workflow designer, MQ built-in connection box with 'Use TLS' option selected and the 'Client Cert Thumbprint' property with private key certificate thumbprint entered.

排查问题

浏览或接收操作失败

如果对空队列运行浏览或接收操作,该操作将失败,并出现以下标头输出:

Screenshot showing the MQ

连接和身份验证问题

当工作流使用 MQ 托管连接器连接到本地 MQ 服务器时,可能会出现以下错误:

"MQ: Could not Connect the Queue Manager '<queue-manager-name>': The Server was expecting an SSL connection."

  • MQ 服务器需要提供受信任的证书颁发机构颁发的证书。

  • MQ 服务器要求你定义要用于 TLS 连接的密码规范。 但是,出于安全考虑,也是为了提供最佳安全套件,Windows 操作系统会发送一组受支持的密码规范。

    运行 MQ 服务器的操作系统会选择要使用的套件。 若要使配置匹配,你必须更改 MQ 服务器设置,使密码规范与 TLS 协商中所选的选项匹配。

    当你尝试连接时,MQ 服务器记录一条事件消息,指出连接尝试失败,因为 MQ 服务器选择了错误的密码规范。 该事件消息包含 MQ 服务器从列表中选择的密码规范。 在服务器连接通道配置中,更新密码规范以匹配事件消息中的密码规范。

后续步骤