MQCNO - 连接选项
MQCNO 结构允许应用程序指定与本地队列管理器的连接相关的选项。
概述
用途: 此结构是 MQCONNX 调用上的输入/输出参数。
版本:MQCNO 的当前版本为 CNVER5。 仅在结构的最新版本中存在的字段在随后的描述中标识为此类字段。
提供的 COPY 文件包含环境支持的最新 MQCNO 版本,但 CNVER 字段的初始值设置为 CNVER1。 要使用 version-1 结构中不存在的字段,应用程序必须将 CNVER 字段设置为所需版本的版本号。
字符集和编码:MQCNO 中的数据必须包含由 CodedCharSetId 队列管理器属性提供的字符集以及由 ENNAT 提供的本地队列管理器的编码。
字段
MQCNO 结构包含以下字段; 这些字段按 字母顺序进行描述:
- CNCCO (10 位带符号整数)
这是 MQCD 通道定义结构从 MQCNO 结构开始的偏移量 (以字节计)。
- CNCCP (指针)
这是指向 MQCD 通道定义结构的指针。
- CNCONID (24 字节字符串)
唯一连接标识。 此字段允许队列管理器通过在首次连接到队列管理器时为其指定唯一标识来可靠地标识应用程序进程。
应用程序在执行 PUT 和 GET 调用时将连接标识用于关联目的。 所有连接都由队列管理器分配一个标识,无论连接是如何建立的。
可以使用连接标识来强制结束长时间运行的工作单元。 为此,请使用 PCF 命令 "停止连接" 或 MQSC 命令 STOP CONN 来指定连接标识。 有关使用这些命令的更多信息,请参阅相关链接。
该字段的初始值为 24 个空字节。
- CNCT (128 字节位字符串)
这是队列管理器在此连接期间与受应用程序影响的资源相关联的标记。
队列管理器连接标记。
每个应用程序或应用程序实例都必须对标记使用不同的值,以便队列管理器可以正确序列化对受影响资源的访问。 请参阅 CN* CT* 选项的描述以获取更多详细信息。 当应用程序终止或发出 MQDISC 调用时,该标记将不再有效。
如果不需要任何标记,请使用以下特殊值:- 无
- 未指定连接标记。
对于字段的长度,该值为二进制零。
这是一个输入字段。 此字段的长度由 LNCTAG 给出。 此字段的初始值为 CTNONE。 如果
CNVER小于 CNVER3,那么将忽略此字段。连接到 z/OS® 队列管理器时,请使用 ConnTag 字段。
- CNOPT (10 位数字带符号整数)
用于控制 MQCONNX操作的选项。
- 绑定选项
- 绑定选项控制所使用的 IBM® MQ 绑定的类型; 仅指定下列其中一个选项:
- CNSBND
- 标准绑定。
标准绑定选项使应用程序和本地队列管理器代理程序在不同的执行单元 (通常在不同的进程中) 中运行。 该安排维护队列管理器的完整性; 即,它保护队列管理器免受错误程序的侵害。
在应用程序可能未经过完全测试,或者可能不可靠或不可信的情况下,请使用 CNSBND 。 CNSBND 是缺省值。
定义了 CNSBND 以帮助程序文档。 请勿将此选项与控制所使用的绑定类型的任何其他选项配合使用; 但由于其值为零,因此无法检测到此类使用。
此选项在所有环境中都受支持。
- CNFBND
- 快速路径绑定。
快速路径绑定选项使应用程序和本地队列管理器代理程序成为同一执行单元的一部分。 快速路径与标准绑定相反,在标准绑定中,应用程序和本地队列管理器代理程序在不同的执行单元中运行。
如果队列管理器不支持此类型的绑定,那么将忽略 CNFBND ; 处理将继续进行,就像未指定选项一样。
在多个进程耗用的资源多于应用程序使用的整体资源的情况下, CNFBND 可能具有优势。 使用快速路径绑定的应用程序称为 可信应用程序。
在决定是否使用快速路径绑定时,请考虑以下要点:- 使用 CNFBND 选项不会阻止应用程序更改或损坏属于队列管理器的消息和其他数据区。 仅在已完全评估这些问题的情况下使用此选项。
- 应用程序不得将异步信号或计时器中断 (例如
sigkill) 与 CNFBND配合使用。 对共享内存段的使用也有限制。 - 应用程序在任何时候都不能有多个线程连接到队列管理器。
- 应用程序必须使用 MQDISC 调用与队列管理器断开连接。
- 应用程序必须先完成,然后才能使用
endmqm命令结束队列管理器。
以下几点适用于在所指示环境中使用 CNFBND :- 在 IBM i上,作业必须在属于
QMQMADM组的用户概要文件QMQM下运行。 此外,程序不得异常终止,否则可能会出现不可预测的结果。
有关使用可信应用程序的含义的更多信息,请参阅 使用 MQCONNX 调用连接到队列管理器 和 可信应用程序的限制。
- CNSHBD
- 共享绑定。
共享绑定选项导致应用程序和本地队列管理器代理程序在单独的执行单元中运行,通常在单独的进程中运行。 该安排维护队列管理器的完整性; 即,它保护队列管理器免受错误程序的侵害。 但是,某些资源在应用程序与本地队列管理器代理程序之间共享。 如果队列管理器不支持此类型的绑定,那么将忽略 CNSHBD 。 将继续处理,好像未指定此选项一样。
- CNIBND
- 隔离的绑定。
隔离绑定选项导致应用程序和本地队列管理器代理程序在单独的执行单元中运行,通常在单独的进程中运行。 该安排维护队列管理器的完整性; 即,它保护队列管理器免受错误程序的侵害。 应用程序进程和本地队列管理器代理程序相互隔离,因为它们不共享资源。 如果队列管理器不支持此类型的绑定,那么将忽略 CNIBND 。 将继续处理,好像未指定此选项一样。
- 句柄共享选项
- 以下选项控制同一进程中不同线程 (并行处理单元) 之间的句柄共享。 只能指定其中一个选项。
- CNHSN
- 线程之间没有句柄共享。
线程之间的无句柄共享选项指示连接和对象句柄只能由导致分配句柄的线程 (即发出 MQCONN, MQCONNX或 MQOPEN 调用的线程) 使用。 这些句柄不能由属于同一进程的其他线程使用。
- CNHSB
- 线程之间的串行句柄共享,带有呼叫阻塞。
线程之间的串行句柄共享 (带有调用阻塞) 选项指示由进程的一个线程分配的连接和对象句柄可以由属于同一进程的其他线程使用。 但是,一次只有一个线程可以使用任何特定句柄,即只允许对句柄进行串行使用。 如果一个线程尝试使用另一个线程已在使用的句柄,那么调用将阻塞 (等待) 直到该句柄变为可用。
- CNHSNB
- 线程之间的串行句柄共享,没有呼叫阻塞。
线程之间的串行句柄共享, 没有 调用分块,选项与 " ,带有 分块 " 选项,但如果句柄正由另一个线程使用,那么调用将立即完成并带有
CCFAIL和RC2219,而不是分块,直到句柄变为可用为止。
一个线程可以有零个或一个非共享句柄,以及零个或多个共享句柄:- 指定 CNHSN 的每个 MQCONN 或 MQCONNX 调用都会在第一个调用上返回新的非共享句柄,并在后续调用上返回相同的非共享句柄 (假定没有介入 MQDISC 调用)。 对于第二次和更高版本的调用,原因码为 RC2002 。
- 指定 CNHSB 或 CNHSNB 的每个 MQCONNX 调用都会在每个调用上返回新的共享句柄。
对象句柄继承与创建对象句柄的 MQOPEN 调用上指定的连接句柄相同的共享属性。 此外,工作单元将继承与用于启动工作单元的连接句柄相同的共享属性; 如果使用共享句柄在一个线程中启动工作单元,那么可以使用同一句柄在另一个线程中更新工作单元。
如果未指定句柄共享选项,那么缺省值由环境确定:- 在 Microsoft Transaction Server (MTS) 环境中,缺省值与 CNHSB相同。
- 在其他环境中,缺省值与 CNHSN相同。
- 重新连接选项
- 重新连接选项确定连接是否可重新连接。 只有客户机连接可重新连接。
- CNRCDF
- 重新连接选项解析为其缺省值。 如果未设置缺省值,那么此选项的值将解析为 DISABLED。 该选项的值将传递到服务器,并且可以由 PCF 和 MQSC查询。
- CNRC
- 可以将应用程序重新连接到与 MQCONNX QMNAME 参数值一致的任何队列管理器。 仅当客户机应用程序与最初与其建立连接的队列管理器之间没有亲缘关系时,才使用 CNRC 选项。 该选项的值将传递到服务器,并且可以由 PCF 和 MQSC查询。
- CNRCD
- 无法重新连接应用程序。 该选项的值 未 传递到服务器。
- CNRCQM
- 应用程序只能重新连接到它最初连接的队列管理器。 如果可以重新连接客户机,但客户机应用程序与最初与其建立连接的队列管理器之间存在亲缘关系,请使用此值。 如果想要客户机自动重新连接至高可用性队列管理器的备用实例,那么选择此值。 该选项的值将传递到服务器,并且可以由 PCF 和 MQSC查询。
MQCC_FAILED和原因码MQRC_OPTIONS_ERROR。缺省选项: 如果不需要所描述的任何选项,那么可以使用以下选项:- CNNONE
- 未指定任何选项。
定义了 CNNONE 以帮助程序文档。 不打算将此选项与任何其他 CN* 选项一起使用,但由于其值为零,因此无法检测到此类使用。
- CNSCO (10 位带符号整数)
这是 MQSCO 结构从 MQCNO 结构开始的偏移量 (以字节为单位)。
如果
CNVER小于 CNVER4,那么将忽略此字段。- CNSCP (指针)
这是 MQSCO 结构的地址。
如果
CNVER小于 CNVER4,那么将忽略此字段。- CNSECPO (10 位有符号整数)
安全参数偏移量。 用于指定用户标识和密码的 MQCSP 结构的偏移量。
该值可以是正数或负数。 此字段的初始值为 0。
如果
CNVER小于 CNVER5,那么将忽略此字段。- CNSECPP (指针)
安全性参数指针。 用于指定用户标识和密码的 MQCSP 结构的地址。
此字段的初始值为空指针或空字节。
如果
CNVER小于 CNVER5,那么将忽略此字段。- CNSID (4 字节字符串)
MQCNO 结构的结构标识。
该值必须为:- CNSIDV
- 连接选项结构的标识。
这始终是一个输入字段。 此字段的初始值为 CNSIDV。
- CNVER (10 位带符号整数)
MQCNO 结构的结构版本号。
该值必须为:- CNVER5
- Version-5 连接选项结构。
此版本在所有环境中都受支持。
以下常量指定当前版本的版本号:- CNVERC
- 当前版本的连接选项结构。
这始终是一个输入字段。 此字段的初始值为 CNVER5。
初始值
| 字段名称 | 常量的名称 | 常量值 |
|---|---|---|
CNSID
|
CNSIDV | 'CNO¬ |
CNVER
|
CNVER5 | 1 |
CNOPT
|
无 | 0 |
CNCCO
|
None | 0 |
CNCCP
|
None | 空指针或空字节 |
CNCT
|
无 | Null |
CNSCP
|
None | 空指针或空字节 |
CNSCO
|
None | 0 |
CNCONID
|
None | Null |
CNSECPO
|
None | 0 |
CNSECPP
|
None | 空指针或空字节 |
- 符号
¬表示单个空白字符。
RPG 声明
D*..1....:....2....:....3....:....4....:....5....:....6....:....7..
D*
D* MQCNO Structure
D*
D* Structure identifier
D CNSID 1 4 INZ('CNO ')
D* Structure version number
D CNVER 5 8I 0 INZ(1)
D* Options that control the action ofMQCONNX
D CNOPT 9 12I 0 INZ(0)
D* Offset of MQCD structure for clientconnection
D CNCCO 13 16I 0 INZ(0)
D* Address of MQCD structure for clientconnection
D CNCCP 17 32* INZ(*NULL)
D* Queue-manager connection tag
D CNCT 33 160 INZ(X'00000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 0000000000000000000000-
D 000000000000000000000-
D ')
D* Address of MQSCO structure forclient connection
D CNSCP 161 176* INZ(*NULL)
D* Offset of MQSCO structure for clientconnection
D CNSCO 177 180I 0 INZ(0)
D* Unique Connection Identifier
D CNCONID 181 204 INZ(X'00000000000000-
D 0000000000000000000000-
D 000000000000')
D* Offset of MQCSP structure
D CNSECPO 205 208I 0 INZ(0)
D* Address of MQCSP structure
D CNSECPP 209 224* INZ(*NULL)