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:
@@ -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 %}
|
||||
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user