1
0
mirror of https://github.com/taigrr/nats.docs synced 2025-01-18 04:03:23 -08:00

Add C Client examples

This commit is contained in:
ainsley
2020-08-26 09:29:26 -05:00
parent 2c9b2f91fc
commit 4382b309d9
34 changed files with 1165 additions and 0 deletions

View File

@@ -168,6 +168,53 @@ nc.on('reconnect', (nc, url) => {
});
```
{% endtab %}
{% tab title="C" %}
```c
static void
disconnectedCB(natsConnection *conn, void *closure)
{
// Do something
printf("Connection disconnected\n");
}
static void
reconnectedCB(natsConnection *conn, void *closure)
{
// Do something
printf("Connection reconnected\n");
}
static void
closedCB(natsConnection *conn, void *closure)
{
// Do something
printf("Connection closed\n");
}
(...)
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetDisconnectedCB(opts, disconnectedCB, NULL);
if (s == NATS_OK)
s = natsOptions_SetReconnectedCB(opts, reconnectedCB, NULL);
if (s == NATS_OK)
s = natsOptions_SetClosedCB(opts, closedCB, NULL);
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// Destroy objects that were created
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
```
{% endtab %}
{% endtabs %}
## Listen for New Servers
@@ -254,6 +301,52 @@ nc.on('serversChanged', (ce) => {
});
```
{% endtab %}
{% tab title="C" %}
```c
static void
discoveredServersCB(natsConnection *conn, void *closure)
{
natsStatus s = NATS_OK;
char **servers = NULL;
int count = 0;
s = natsConnection_GetDiscoveredServers(conn, &servers, &count);
if (s == NATS_OK)
{
int i;
// Do something...
for (i=0; i<count; i++)
printf("Discovered server: %s\n", servers[i]);
// Free allocated memory
for (i=0; i<count; i++)
free(servers[i]);
free(servers);
}
}
(...)
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetDiscoveredServersCB(opts, discoveredServersCB, NULL);
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// Destroy objects that were created
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
```
{% endtab %}
{% endtabs %}
## Listen for Errors
@@ -367,5 +460,34 @@ nc.on('error', (err) => {
});
```
{% endtab %}
{% tab title="C" %}
```c
static void
errorCB(natsConnection *conn, natsSubscription *sub, natsStatus s, void *closure)
{
// Do something
printf("Error: %d - %s\n", s, natsStatus_GetText(s));
}
(...)
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetErrorHandler(opts, errorCB, NULL);
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// Destroy objects that were created
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
```
{% endtab %}
{% endtabs %}

View File

@@ -110,6 +110,40 @@ await nc.subscribe("updates", cb=cb, pending_bytes_limit=5*1024*1024, pending_ms
// slow pending limits are not configurable on TypeScript NATS client.
```
{% endtab %}
{% tab title="C" %}
```c
natsConnection *conn = NULL;
natsSubscription *sub1 = NULL;
natsSubscription *sub2 = NULL;
natsStatus s = NATS_OK;
s = natsConnection_ConnectTo(&conn, NATS_DEFAULT_URL);
// Subscribe
if (s == NATS_OK)
s = natsConnection_Subscribe(&sub1, conn, "updates", onMsg, NULL);
// Set limits of 1000 messages or 5MB, whichever comes first
if (s == NATS_OK)
s = natsSubscription_SetPendingLimits(sub1, 1000, 5*1024*1024);
// Subscribe
if (s == NATS_OK)
s = natsConnection_Subscribe(&sub2, conn, "updates", onMsg, NULL);
// Set no limits for this subscription
if (s == NATS_OK)
s = natsSubscription_SetPendingLimits(sub2, -1, -1);
(...)
// Destroy objects that were created
natsSubscription_Destroy(sub1);
natsSubscription_Destroy(sub2);
natsConnection_Destroy(conn);
```
{% endtab %}
{% endtabs %}
## Detect a Slow Consumer and Check for Dropped Messages
@@ -232,5 +266,35 @@ public class SlowConsumerListener {
// slow consumer detection is not configurable on NATS TypeScript client.
```
{% endtab %}
{% tab title="C" %}
```c
static void
errorCB(natsConnection *conn, natsSubscription *sub, natsStatus s, void *closure)
{
// Do something
printf("Error: %d - %s", s, natsStatus_GetText(s));
}
(...)
natsConnection *conn = NULL;
natsOptions *opts = NULL;
natsStatus s = NATS_OK;
s = natsOptions_Create(&opts);
if (s == NATS_OK)
s = natsOptions_SetErrorHandler(opts, errorCB, NULL);
if (s == NATS_OK)
s = natsConnection_Connect(&conn, opts);
(...)
// Destroy objects that were created
natsConnection_Destroy(conn);
natsOptions_Destroy(opts);
```
{% endtab %}
{% endtabs %}