The publish
methods in the C# client deliver the message to be published to AMPS and then return immediately, without waiting for AMPS to return an acknowledgment. Likewise, the sowDelete
methods request deletion of SOW messages, and return before AMPS processes the message and performs the deletion. This approach provides high performance for operations that are unlikely to fail in production. However, this means that the methods return before AMPS has processed the command, without the ability to return an error in the event that the command fails.
The AMPS C# client provides a FailedWriteHandler
that is called when the client receives an acknowledgment that indicates a failure to persist data within AMPS. To use this functionality, you implement the FailedWriteHandler
interface, construct an instance of your new class, and register that instance with the setFailedWriteHandler()
function on the client. When an acknowledgment returns that indicates a failed write, AMPS calls the registered handler method with information from the acknowledgment message, supplemented with information from the client publish store if one is available. Your client can log this information, present an error to the user, or take whatever action is appropriate for the failure.
If your application needs to know whether publishes succeeded and are durably persisted, the following approach is recommended:
Set a PublishStore
on the client. This will ensure that messages are retransmitted if the client becomes disconnected before the message is acknowledged and request persisted
acknowledgments for messages.
Install a FailedWriteHandler
. In the event that AMPS reports an error for a given message, that event will be reported to the FailedWriteHandler
.
Call publishFlush()
and verify that all messages are persisted before the application exits.
When no FailedWriteHandler
is registered, acknowledgments that indicate errors in persisting data are treated as unexpected messages and routed to the LastChanceMessageHandler
. In this case, AMPS provides only the acknowledgment message and does not provide the additional information from the client publish store.