You can perform assured message delivery using synchronous message transmission, but the application must take responsibility for error handling.
The confirmID parameter of the putMessage method dictates whether a confirm flow is expected or not. A value of zero means that message transmission occurs in one flow, while a value of greater than zero means that a confirm flow is expected. The target queue manager logs the message to the destination queue as usual, but the message is locked and invisible to MQe applications, until a confirm flow is received. When you put messages with the confirmID, the messages are ordered by confirm time, not arrival time.
The mqeQueueManager_confirmPutMessage() method requires you to specify the UniqueID of the message, not the confirmID used in the prior put message command. The confirmID is used to restore messages that remain locked after a transmission failure.