使用 MQSeries 适配器在 BizTalk 发送端口中动态设置端点定义
Dynamically set Endpoint definition in BizTalk Send Port using MQSeries adapter
简介
我们与外部方交换收入数据。每年所得税法规都会发生变化,并且必须实施新的消息模式。我们现在总共有 8 个不同的模式版本,每个版本都部署在一个单独的 'year income tax' 应用程序中,并且这个数量每年增加 1。
因为我们按安装的应用程序向托管公司付费,所以我们希望减少安装的应用程序数量。
所有这些应用程序在功能上都是相同的,这意味着我们验证传入的消息,并将有效消息转发到特定的 MQSeries 队列中。每条无效消息都被路由到响应队列。每个应用程序都有自己的 'valid' 和 'invalid' 消息队列。
计划
一个处理所有 8(+) 条消息的通用应用程序。新架构必须可以部署,而无需更改应用程序或为之前的 运行 'income year tax' 流程停机。
到目前为止...
我可以在同一 BizTalk 接收端口 (MessageType XmlDocument) 上接收多条消息,并且能够通过调用自定义接收管道(XML 反汇编程序 + XML 在编排中动态验证这些消息验证器)。异常和有效消息都按规定进行处理。模式和通用应用程序之间没有引用,因此无需停止 运行 进程即可部署模式。到目前为止,还不错。
编排有 1 个接收形状和 2 个发送形状(有效、无效)。
SSO 包含用于将 'valid' 和 'invalid' 消息路由到其正确队列的值。根据传入的消息类型,SSO 被质疑是否正确 'valid' 或 'invalid' 队列定义。
问题
我之前处理过动态 FTP、FILE、WCF 和 SMTP 端口,在为适配器提供正确的上下文属性后,它们都可以完美地工作。甚至 MSMQ 似乎也有一个相当直接的方法来动态设置传输属性。
但是,我似乎找不到 MQSeries MQMT ContextProperties 来动态设置队列定义。
Microsoft 没有提供太多关于 this 的信息,并且在 Internet 上进行大量搜索也没有为我提供任何有用的信息(示例)。
我尝试将 IBM's docs 与 Microsoft 的进行匹配,但我现在完全卡住了。
我建议使用 MQSC 适配器进行 IBM MQ 集成。它是主机集成服务器 MSI 的一部分。对于 MQSeries 适配器所需的 Windows 安装,它只需要在服务器上安装 MQ 客户端而不是 MQ 服务器。
按照以下格式设置 OutboundTransportLocation 属性 mqsc://{channelName}/tcp/{server{({port})/{queuemanager}/{queuename}
传输类型 = MQSC
上下文属性 - 可以在具有命名空间 (http://schemas.microsoft.com/BizTalk/2003/mqs-properties) 的程序集 MQSeriesEx.MQSPropertySchemaEx 中找到架构。
如果需要的话,您只需要设置很少的上下文属性。
- Channel_HeartBeat
- Channel_MaxMessageLength
- Channel_UserId
- Channel_Password
- 连接超时
如果需要其他属性而不是使用 MQSeries.MQSPropertySchema 上下文属性。
感谢Vikas的建议。
我按照你的指示做了,发现它有效!
但是,我发现它比需要的要复杂一些,因为它需要我为每个流配置通道名称。
最适合我的解决方案是我一直在考虑的解决方案,它就在我面前。我的尝试失败了,因为我在应该设置动态发送端口属性的地方设置了传出消息的属性,从而犯了一个致命错误。
SendPort(Microsoft.XLANGs.BaseTypes.Address)="MQS://SERVER/QMANAGER/QUEUENAME";
简介
我们与外部方交换收入数据。每年所得税法规都会发生变化,并且必须实施新的消息模式。我们现在总共有 8 个不同的模式版本,每个版本都部署在一个单独的 'year income tax' 应用程序中,并且这个数量每年增加 1。
因为我们按安装的应用程序向托管公司付费,所以我们希望减少安装的应用程序数量。
所有这些应用程序在功能上都是相同的,这意味着我们验证传入的消息,并将有效消息转发到特定的 MQSeries 队列中。每条无效消息都被路由到响应队列。每个应用程序都有自己的 'valid' 和 'invalid' 消息队列。
计划
一个处理所有 8(+) 条消息的通用应用程序。新架构必须可以部署,而无需更改应用程序或为之前的 运行 'income year tax' 流程停机。
到目前为止...
我可以在同一 BizTalk 接收端口 (MessageType XmlDocument) 上接收多条消息,并且能够通过调用自定义接收管道(XML 反汇编程序 + XML 在编排中动态验证这些消息验证器)。异常和有效消息都按规定进行处理。模式和通用应用程序之间没有引用,因此无需停止 运行 进程即可部署模式。到目前为止,还不错。
编排有 1 个接收形状和 2 个发送形状(有效、无效)。
SSO 包含用于将 'valid' 和 'invalid' 消息路由到其正确队列的值。根据传入的消息类型,SSO 被质疑是否正确 'valid' 或 'invalid' 队列定义。
问题
我之前处理过动态 FTP、FILE、WCF 和 SMTP 端口,在为适配器提供正确的上下文属性后,它们都可以完美地工作。甚至 MSMQ 似乎也有一个相当直接的方法来动态设置传输属性。
但是,我似乎找不到 MQSeries MQMT ContextProperties 来动态设置队列定义。
Microsoft 没有提供太多关于 this 的信息,并且在 Internet 上进行大量搜索也没有为我提供任何有用的信息(示例)。
我尝试将 IBM's docs 与 Microsoft 的进行匹配,但我现在完全卡住了。
我建议使用 MQSC 适配器进行 IBM MQ 集成。它是主机集成服务器 MSI 的一部分。对于 MQSeries 适配器所需的 Windows 安装,它只需要在服务器上安装 MQ 客户端而不是 MQ 服务器。
按照以下格式设置 OutboundTransportLocation 属性 mqsc://{channelName}/tcp/{server{({port})/{queuemanager}/{queuename}
传输类型 = MQSC
上下文属性 - 可以在具有命名空间 (http://schemas.microsoft.com/BizTalk/2003/mqs-properties) 的程序集 MQSeriesEx.MQSPropertySchemaEx 中找到架构。
如果需要的话,您只需要设置很少的上下文属性。
- Channel_HeartBeat
- Channel_MaxMessageLength
- Channel_UserId
- Channel_Password
- 连接超时
如果需要其他属性而不是使用 MQSeries.MQSPropertySchema 上下文属性。
感谢Vikas的建议。 我按照你的指示做了,发现它有效!
但是,我发现它比需要的要复杂一些,因为它需要我为每个流配置通道名称。
最适合我的解决方案是我一直在考虑的解决方案,它就在我面前。我的尝试失败了,因为我在应该设置动态发送端口属性的地方设置了传出消息的属性,从而犯了一个致命错误。
SendPort(Microsoft.XLANGs.BaseTypes.Address)="MQS://SERVER/QMANAGER/QUEUENAME";