ActiveMQ Artemis supports two types of durability modes for messages:
nondurable. By default each message sent by the client using
SendAsync method is durable. That means that the broker actually has to persist the message on the disk before the confirmation frame (ack) will be sent back to the client. The confirmation frame is what we can await for.
SendAsync completes without errors we may expect that the message will be delivered with at least once semantics. Durable messages incur more overhead due to the need to store the message, and value reliability over performance.
Setting message durability mode to
Nondurable instructs the broker not to persist the message. By default each message sent by the client using
Send method is nondurable.
Send is non-blocking both in terms of packets transmission (it uses Socket.SendAsync method in the fire and forget manner) and in terms of waiting for confirmation from the broker (it doesn't). As a result, at most once is all that you can expect in terms of message delivery guarantees from this combination. Nondurable messages incur less overhead and value performance over reliability.
Default message durability settings may be overridden via producer configuration:
And for each message individually: