NATS C Client with JetStream and Streaming support  3.13.0
The nats.io C Client, Supported by Synadia Communications Inc.
Loading...
Searching...
No Matches
Publishing

Functions

NATS_EXTERN natsStatus jsPubOptions_Init (jsPubOptions *opts)
 Initializes a publish options structure.
 
NATS_EXTERN natsStatus js_Publish (jsPubAck **pubAck, jsCtx *js, const char *subj, const void *data, int dataLen, jsPubOptions *opts, jsErrCode *errCode)
 Publishes data on a subject to JetStream.
 
NATS_EXTERN natsStatus js_PublishMsg (jsPubAck **pubAck, jsCtx *js, natsMsg *msg, jsPubOptions *opts, jsErrCode *errCode)
 Publishes a message to JetStream.
 
NATS_EXTERN void jsPubAck_Destroy (jsPubAck *pubAck)
 Destroys the publish acknowledgment object.
 
NATS_EXTERN natsStatus js_PublishAsync (jsCtx *js, const char *subj, const void *data, int dataLen, jsPubOptions *opts)
 Publishes data to JetStream but does not wait for a jsPubAck.
 
NATS_EXTERN natsStatus js_PublishMsgAsync (jsCtx *js, natsMsg **msg, jsPubOptions *opts)
 Publishes a message to JetStream but does not wait for a jsPubAck.
 
NATS_EXTERN natsStatus js_PublishAsyncComplete (jsCtx *js, jsPubOptions *opts)
 Wait for all outstanding messages to be acknowledged.
 
NATS_EXTERN natsStatus js_PublishAsyncGetPendingList (natsMsgList *pending, jsCtx *js)
 Returns the list of pending messages published asynchronously.
 
NATS_EXTERN natsStatus js_BatchPublishStart (jsAtomicBatchCtx **ctx, jsPubAck **new_puback, jsCtx *js, natsMsg *msg, jsPubOptions *opts, jsErrCode *errCode)
 Starts an atomic batch publish.
 
NATS_EXTERN natsStatus js_BatchPublishAdd (jsPubAck **new_puback, jsAtomicBatchCtx *ctx, natsMsg *msg, jsPubOptions *opts, jsErrCode *errCode)
 Adds a message to the batch publish.
 
NATS_EXTERN natsStatus js_BatchPublishCommit (jsPubAck **new_puback, jsAtomicBatchCtx *ctx, natsMsg *msg, jsPubOptions *opts, jsErrCode *errCode)
 Commits the batch publish.
 
NATS_EXTERN void jsAtomicBatchCtx_Destroy (jsAtomicBatchCtx *ctx)
 Destroys the atomic batch context object.
 

Detailed Description

Publishing functions

Function Documentation

◆ jsPubOptions_Init()

NATS_EXTERN natsStatus jsPubOptions_Init ( jsPubOptions opts)

Use this before setting specific publish options and passing this configuration to the JetStream publish APIs.

Parameters
optsthe pointer to the jsPubOptions to initialize.

◆ js_Publish()

NATS_EXTERN natsStatus js_Publish ( jsPubAck **  pubAck,
jsCtx js,
const char *  subj,
const void *  data,
int  dataLen,
jsPubOptions opts,
jsErrCode errCode 
)

Publishes the data to the given subject to JetStream.

See js_PublishMsg for details.

Parameters
pubAckthe location where to store the pub acknowledgment, or NULL if not needed.
jsthe pointer to the jsCtx object.
subjthe subject the data is sent to.
datathe data to be sent, can be NULL.
dataLenthe length of the data to be sent.
optsthe publish options, possibly NULL.
errCodethe location where to store the JetStream specific error code, or NULL if not needed.

◆ js_PublishMsg()

NATS_EXTERN natsStatus js_PublishMsg ( jsPubAck **  pubAck,
jsCtx js,
natsMsg msg,
jsPubOptions opts,
jsErrCode errCode 
)

Publishes the given message to JetStream.

Note
If you are not interested in inspecting the publish acknowledgment, you can pass NULL, but keep in mind that the publish acknowledgment is still sent by the server.
The returned jsPubAck object needs to be destroyed with jsPubAck_Destroy when no longer needed.
See also
jsPubAck_Destroy
Parameters
pubAckthe location where to store the pub acknowledgment, or NULL if not needed.
jsthe pointer to the jsCtx object.
msgthe pointer to the natsMsg object to send.
optsthe publish options, possibly NULL.
errCodethe location where to store the JetStream specific error code, or NULL if not needed.

◆ jsPubAck_Destroy()

NATS_EXTERN void jsPubAck_Destroy ( jsPubAck pubAck)

Releases memory allocated for this publish acknowledgment object.

Parameters
pubAckthe jsPubAck object to destroy.

◆ js_PublishAsync()

NATS_EXTERN natsStatus js_PublishAsync ( jsCtx js,
const char *  subj,
const void *  data,
int  dataLen,
jsPubOptions opts 
)

See js_PublishMsgAsync for details.

Parameters
jsthe pointer to the jsCtx object.
subjthe subject the data is sent to.
datathe data to be sent, can be NULL.
dataLenthe length of the data to be sent.
optsthe publish options, possibly NULL.

◆ js_PublishMsgAsync()

NATS_EXTERN natsStatus js_PublishMsgAsync ( jsCtx js,
natsMsg **  msg,
jsPubOptions opts 
)

Publishes a message asynchronously to JetStream. User can call js_PublishAsyncComplete to be notified when all publish acknowledgments for the pending publish calls have been received.

Note
If this call is successful, the library takes ownership of the message and will destroy it after the acknowledgment has been received, or will present it to the user through the jsPubAckErrHandler callback. To prevent the user from accessing/destroying the message while in use by the library, this function requires a pointer to the pointer of the message so that it can be cleared. That way, the user should always call natsMsg_Destroy, regardless of success or failure, since natsMsg_Destroy will have no effect if the message pointer is NULL.
See also
js_PublishAsyncComplete
jsPubAckErrHandler
Parameters
jsthe pointer to the jsCtx object.
msgthe memory location where the pointer to the natsMsg object is located. If the library takes ownership of the message, this location will be cleared so a following call to natsMsg_Destroy would have no effect.
optsthe publish options, possibly NULL.

◆ js_PublishAsyncComplete()

NATS_EXTERN natsStatus js_PublishAsyncComplete ( jsCtx js,
jsPubOptions opts 
)

This call will block until the library has received acknowledgment for all outstanding published messages.

To limit the wait, user can pass a jsPubOptions with a MaxWait set to the maximum number of milliseconds that the call should block.

Parameters
jsthe pointer to the jsCtx object.
optsthe publish options, possibly NULL.

◆ js_PublishAsyncGetPendingList()

NATS_EXTERN natsStatus js_PublishAsyncGetPendingList ( natsMsgList pending,
jsCtx js 
)

This call returns the list of all asynchronously published messages for which no acknowledgment have been received yet.

The user has now back ownership of the messages and can resend send if desired or simply destroy them.

Note
After this call returns, it is possible that acknowledgments arrive from the server but since they have been removed from the pending list, the acknowledgments will be discarded (no jsPubAckErrHandler callback invoked). If the server did receive a particular message and the user in the meantime has resent that message, it would be a duplicate, so in order for the server to detect this duplicate, ensure that the stream's duplicate window setting is specified and a unique message ID was set when sending the message.
Warning
The user must call natsMsgList_Destroy to release memory allocated by this call and destroy all pending messages still present in the list.
natsMsgList pending;
s = js_PublishAsyncGetPendingList(&pending, js);
if (s == NATS_OK)
{
int i;
for (i=0; i<pending.Count; i++)
{
if (your_decision_to_resend(pending.Msgs[i]))
{
// If the call is successful, pending.Msgs[i] will
// be set to NULL so the message will not be
// destroyed.
js_PublishMsgAsync(js, &(pending.Msgs[i]), NULL);
}
}
// Calling this will release memory allocated to hold the
// array of messages but also call natsMsg_Destroy on all
// messages still present in the array.
natsMsgList_Destroy(&pending);
}
Parameters
pendingpointer to a natsMsgList object, typically defined on the stack.
jsthe pointer to the jsCtx object.

◆ js_BatchPublishStart()

NATS_EXTERN natsStatus js_BatchPublishStart ( jsAtomicBatchCtx **  ctx,
jsPubAck **  new_puback,
jsCtx js,
natsMsg msg,
jsPubOptions opts,
jsErrCode errCode 
)

This call initializes an atomic batch publish and sends the first message.

Note
The returned context must be destroyed with jsAtomicBatchCtx_Destroy after the publish is committed or aborted.
The returned jsPubAck object needs to be destroyed with jsPubAck_Destroy when no longer needed.
Parameters
ctxWhere to store the atomic batch context for subsequent publishes.
new_pubackWhere to store the pub ack for the first message, or NULL if not needed.
jsthe pointer to the jsCtx object.
msgthe message to publish as part of this batch.
optsthe publish options, possibly NULL.
errCodethe location where to store the JetStream specific error code, possibly NULL.

◆ js_BatchPublishAdd()

NATS_EXTERN natsStatus js_BatchPublishAdd ( jsPubAck **  new_puback,
jsAtomicBatchCtx ctx,
natsMsg msg,
jsPubOptions opts,
jsErrCode errCode 
)

This call adds a message to the batch publish initialized by js_BatchPublishStart.

Note
The returned jsPubAck object needs to be destroyed with jsPubAck_Destroy.
Parameters
new_pubackWhere to store the pub ack for this message, or NULL if not needed.
ctxthe atomic batch context returned by js_BatchPublishStart.
msgthe message to publish as part of this batch.
optsthe publish options, possibly NULL.
errCodethe location where to store the JetStream specific error code, possibly NULL.

◆ js_BatchPublishCommit()

NATS_EXTERN natsStatus js_BatchPublishCommit ( jsPubAck **  new_puback,
jsAtomicBatchCtx ctx,
natsMsg msg,
jsPubOptions opts,
jsErrCode errCode 
)

This call commits the batch publish initialized by js_BatchPublishStart and added to by js_BatchPublishAdd.

Note
The returned jsPubAck object needs to be destroyed with jsPubAck_Destroy.
After this call, the context should be destroyed with jsAtomicBatchCtx_Destroy.
Parameters
new_pubackWhere to store the pub ack for the commit, or NULL if not needed.
ctxthe atomic batch context returned by js_BatchPublishStart.
msgthe message to publish as part of this batch.
optsthe publish options, possibly NULL.
errCodethe location where to store the JetStream specific error code, possibly NULL.

◆ jsAtomicBatchCtx_Destroy()

NATS_EXTERN void jsAtomicBatchCtx_Destroy ( jsAtomicBatchCtx ctx)

Releases memory allocated for this atomic batch context object.

Parameters
ctxthe pointer to the jsAtomicBatchCtx object.