使用 WebSphere MQ 进行基本消息传递
当所有数据库应用程序都连接到同一个 Db2 数据库服务器时,使用 Db2® MQ 功能进行消息传递的最基本形式就会出现。 客户机可以是数据库服务器的本地客户机,也可以分布在网络环境中。
在简单方案中,客户机 A 调用 MQSEND 函数以将用户定义的字符串发送到缺省服务定义的位置。 Db2 执行在数据库服务器上执行此操作的 MQ 函数。 稍后,客户机 B 调用 MQRECEIVE 函数以除去缺省服务定义的队列头的消息,并将其返回到客户机。 Db2 执行在数据库服务器上执行此操作的 MQ 函数。
数据库客户机可以通过多种方式使用简单消息传递:
- 数据收集
以消息形式从一个或多个源接收信息。 信息源可以是任何应用程序。 从队列接收数据并将其存储在数据库表中以进行其他处理。
- 工作负载分配
工作请求将发布到由同一应用程序的多个实例共享的队列中。 当应用程序实例准备好执行某些工作时,它将从队列的头接收包含工作请求的消息。 应用程序的多个实例可以共享由单个汇聚请求队列表示的工作负载。
- 应用程序信令
在多个流程协作的情况下,消息通常用于协调其工作。 这些消息可能包含要执行的命令或工作请求。 有关此技术的更多信息,请参阅 Application to application Connectivity with WebSphere MQ。
以下场景扩展了基本消息传递以合并远程消息传递。 假定机器 A 向机器 B 发送消息。
- Db2 客户机执行 MQSEND 函数调用,指定已定义为机器 B 上的远程队列的目标服务。
- MQ 函数执行发送消息的工作。 机器 A 上的 WebSphere MQ 服务器接受消息,并保证将其交付到服务定义的目标以及机器 A 的当前 MQ 配置。 服务器确定目标是机器 B 上的队列。 然后,服务器尝试将消息传递到机器 B 上的 WebSphere MQ 服务器,并根据需要重试。
- 机器 B 上的 WebSphere MQ 服务器接受来自机器 A 上的服务器的消息,并将其放入机器 B 上的目标队列中。
- 机器 B 上的 WebSphere MQ 客户机请求队列头的消息。
如果从 MQI API 返回错误,那么指定的 Db2 MQ 函数将返回错误。 该错误将包含失败的 MQ API 的名称以及 MQ 条件代码和 MQ 原因码。 要确定故障原因,需要参阅 Websphere MQSeries ® 信息中心。 例如,如果服务包含不存在的 MQSeries 队列管理器的名称,那么将返回以下错误:
SQL State: 38401
Vendor Code: -443
Message: [SQL0443] cc=2:rc=2058:MQCONN FAILED
此消息指示 MQCONN API 失败,原因码为 2058。 Websphere MQSeries 信息中心包含原因码 2058 的详细描述。