0

我正在尝试编写能够抵抗意外情况的 MQ 客户端。我用 client_acknowledge 模式创建了客户端:

ISession session = conn.CreateSession(false, AcknowledgeMode.ClientAcknowledge);

在 XMS 文档中有 CLIENT_ACKNOWLEDGE 的信息:

应用程序可以单独确认收到每条消息,也可以接收一批消息并仅针对它收到的最后一条消息调用 Acknowledge 方法。当调用 Acknowledge 方法时,自上次调用该方法以来收到的所有消息都会被确认。

客户端从队列中获取例如 10 条消息并将它们写入数据库。

问题是如何设置此模式并确认每条消息(以确保消息传递)?

4

1 回答 1

1

当消息传递到您的应用程序时,它是如何丢失的?

既然您要处理两种资源,为什么不使用事务处理会话或 XA 事务处理会话。如果更新数据库时出现问题,您可以执行回滚以便重新传递消息。

更新

在事务会话中,确认模式没有意义。当调用提交时确认消息或调用回滚时回滚。

如果与 IBM MQ 队列管理器的连接丢失,队列管理器会自动回滚所有未提交的消息。因此不会丢失任何消息。

于 2016-01-22T14:46:40.373 回答