【问题标题】:Pausing MQ Queue Manager using SIGSTOP使用 SIGSTOP 暂停 MQ 队列管理器
【发布时间】:2018-07-08 18:59:36
【问题描述】:

我有一个简单的 IBM MQ 应用程序:有 2 个队列 -> 一个接收队列,显然另一个是发送队列。现在我将大量消息放入接收队列,当应用程序处理消息时,我使用 SIGSTOP 暂停 MQ 核心进程。

是否应该立即停止消息流?这就是我的情况:

应用程序可以接收所有消息并在处理后将它们推送到发送队列。现在,如果我尝试将更多消息推送到接收队列中,MQ 推杆(示例实用程序)无法推送通常的消息。

我的问题是:在这种情况下 MQ 应该如何表现?消息流不应该在 SIGSTOP 信号之后立即停止吗?我的应用程序也没有捕获任何异常。

任何答案都会有所帮助。

【问题讨论】:

  • 我几乎无法让自己对此 +1,但如果只有其他人阅读它并且不执行建议的操作,那将是值得的。

标签: ibm-mq


【解决方案1】:

简短的回答是,没有人能告诉你 WMQ 在这种情况下应该如何表现,因为天哪,不要那样做!

最近有人在列表服务器上提出了类似的问题。 WMQ 开发团队的 Andrew Hickson 如此回应:

向 MQ 服务器端应用程序发送 STOP 信号是危险的 够了,但是向 MQ 进程发送一个 STOP 信号(例如 amqrmppa) 会非常危险。如果这个过程碰巧拥有一个inter STOP 信号到达整个队列时的进程锁 经理很容易陷入停顿。同样的问题确实会出现 “简单”服务器端应用程序(例如队列管理器范围 在 MQCONN 处理期间获得/释放锁),但范围 对于无意中停止队列管理器,使用 MQ 内部进程。

这里明显的问题是您认为什么是“MQ 核心流程”?控制器?代理进程之一?它们都是相互通信的,没有一个进程可以代表“QMgr”。

如果您需要中断处理,请使用 WMQ 工具,例如禁用队列上的 PUT 或 GET、终止与 QMgr 的连接等。

【讨论】:

  • 我真的不想这样做。但是我的客户正在做并且正在寻求解释。通过 MQ 核心进程,我的意思是 amqzxma0(来自 ps -ef)。
  • 对您的客户的回答是,IBM 不建议或不支持针对单个 QMgr 进程发出 SIGSTOP 并且结果未定义。好消息是 WMQ 非常健壮,可以在这种情况下保持数据完整性,但这并不意味着不可能以这种方式自取其辱。仅使用记录在案的 API 和命令,除非支持人员指示。
  • 我同意 T.Rob...这是一件愚蠢的事情...amqzxma0 是执行控制器 - 它几乎是其他事情的协调器 - 例如,任何新进程连接到 qmgr 需要使用它来分配一个代理进程。它的 EC 会定期检查其他进程的运行状况,或清理一些死进程 - 暂停它,你就是在 asking 自找麻烦。不要这样做...
  • 非常感谢!!!还有一个问题。任何人都可以提供指向 IBM 不推荐或不支持针对队列管理器进程发出 SIGSTOP 的页面的链接吗?很遗憾,我找不到它。
  • 没有。一个人可能会对 QMgr 做无数的坏事,但他们并没有记录所有这些坏事。他们记录了你应该做的事情应该,并假设如果没有记录,你就不会尝试去做。
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
相关资源
最近更新 更多