SDKC#
C# SDK
The Iggy SDK for C# is a library that allows you to interact with the Iggy API from your .NET applications. It communicates with the Iggy server over TCP using the binary protocol. The repository can be found here.
Installation
dotnet add package Apache.IggyQuick start
Producer
using System.Text;
using Apache.Iggy;
using Apache.Iggy.Configuration;
using Apache.Iggy.Enums;
using Apache.Iggy.Factory;
using Apache.Iggy.Kinds;
using Apache.Iggy.Messages;
const string StreamName = "sample-stream";
const string TopicName = "sample-topic";
var client = IggyClientFactory.CreateClient(new IggyClientConfigurator()
{
BaseAddress = "127.0.0.1:8090",
Protocol = Protocol.Tcp,
});
await client.ConnectAsync();
await client.LoginUser("iggy", "iggy");
await client.CreateStreamAsync(StreamName);
await client.CreateTopicAsync(
Identifier.String(StreamName),
TopicName,
1,
CompressionAlgorithm.None
);
var partitioning = Partitioning.PartitionId(0);
for (int i = 0; i < 10; i++)
{
var payload = Encoding.UTF8.GetBytes($"message-{i}");
var messages = new List<Message> { new Message(Guid.NewGuid(), payload) };
await client.SendMessagesAsync(
Identifier.String(StreamName),
Identifier.String(TopicName),
partitioning,
messages
);
}Consumer
using System.Text;
using Apache.Iggy;
using Apache.Iggy.Configuration;
using Apache.Iggy.Contracts;
using Apache.Iggy.Enums;
using Apache.Iggy.Factory;
using Apache.Iggy.Kinds;
var client = IggyClientFactory.CreateClient(new IggyClientConfigurator()
{
BaseAddress = "127.0.0.1:8090",
Protocol = Protocol.Tcp,
});
await client.ConnectAsync();
await client.LoginUser("iggy", "iggy");
var consumer = Consumer.New(1);
var offset = 0ul;
uint messagesPerBatch = 10;
while (true)
{
var polledMessages = await client.PollMessagesAsync(
Identifier.String("sample-stream"),
Identifier.String("sample-topic"),
0,
consumer,
PollingStrategy.Offset(offset),
messagesPerBatch,
false
);
if (!polledMessages.Messages.Any()) break;
offset += (ulong)polledMessages.Messages.Count;
foreach (var message in polledMessages.Messages)
{
var payload = Encoding.UTF8.GetString(message.Payload);
Console.WriteLine($"Offset: {message.Header.Offset}, Payload: {payload}");
}
}Examples
Working examples are available in the examples/csharp directory. The following example sets are included:
- GettingStarted - basic producer and consumer
- MessageEnvelope - working with message envelopes
- MessageHeaders - custom message headers
- MultiTenant - multi-tenant streaming setup
- TcpTls - TLS-encrypted TCP connections
- StreamBuilder - stream builder API usage
The solution can be opened with Visual Studio or built with dotnet build.