diff --git a/README.md b/README.md index b38d442..8840fd4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,82 @@ -# RedisStreamsInOrleans -This is a project that demonstrates how to create a custom Redis Stream Provider for Orleans. -https://swacblooms.com/custom-redis-streams-provider-for-orleans/ \ No newline at end of file +# Universley.OrleansContrib.StreamsProvider.Redis + +## Summary +This library provides an integration of Redis Streams with Microsoft Orleans, allowing you to use Redis as a streaming provider within your Orleans applications. It enables seamless communication and data streaming between Orleans grains and external clients using Redis Streams. + +## How to Use the Redis Provider with Orleans + +### 1. With Grain as a Client +To use Redis Streams with a grain as a client, follow these steps: + +1. Install the necessary NuGet packages: + ```sh + dotnet add package Orleans.Streaming.Redis + ``` + +2. Configure the Redis stream provider in your Orleans silo configuration: + ```csharp + var host = new SiloHostBuilder() + .AddRedisStreams("RedisProvider", options => + { + options.ConnectionString = "your_redis_connection_string"; + }) + .Build(); + ``` + +3. In your grain, use the stream provider to send and receive messages: + ```csharp + public class MyGrain : Grain, IMyGrain + { + private IAsyncStream _stream; + + public override async Task OnActivateAsync() + { + var streamProvider = GetStreamProvider("RedisProvider"); + _stream = streamProvider.GetStream(this.GetPrimaryKey(), "streamNamespace"); + await base.OnActivateAsync(); + } + + public async Task SendMessage(string message) + { + await _stream.OnNextAsync(message); + } + + public async Task ReceiveMessages() + { + var handle = await _stream.SubscribeAsync((message, token) => + { + Console.WriteLine($"Received message: {message}"); + return Task.CompletedTask; + }); + } + } + ``` + +### 2. With External Client +To use Redis Streams with an external client, follow these steps: + +1. Install the StackExchange.Redis package: + ```sh + dotnet add package StackExchange.Redis + ``` + +2. Connect to the Redis server and interact with the stream: + ```csharp + using StackExchange.Redis; + + var redis = ConnectionMultiplexer.Connect("your_redis_connection_string"); + var db = redis.GetDatabase(); + + // Add a message to the stream + var messageId = await db.StreamAddAsync("mystream", "message", "Hello, Redis!"); + + // Read messages from the stream + var messages = await db.StreamReadAsync("mystream", "0-0"); + foreach (var message in messages) + { + Console.WriteLine($"Message ID: {message.Id}, Values: {string.Join(", ", message.Values)}"); + } + ``` + +## Credit +This library is based on the original repository by [sammychinedu2ky](https://github.com/sammychinedu2ky/RedisStreamsInOrleans). \ No newline at end of file