Compare commits
No commits in common. "master" and "2025.1.9" have entirely different histories.
85
README.md
85
README.md
@ -1,82 +1,3 @@
|
|||||||
# Universley.OrleansContrib.StreamsProvider.Redis
|
# RedisStreamsInOrleans
|
||||||
|
This is a project that demonstrates how to create a custom Redis Stream Provider for Orleans.
|
||||||
## Summary
|
https://swacblooms.com/custom-redis-streams-provider-for-orleans/
|
||||||
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<string> _stream;
|
|
||||||
|
|
||||||
public override async Task OnActivateAsync()
|
|
||||||
{
|
|
||||||
var streamProvider = GetStreamProvider("RedisProvider");
|
|
||||||
_stream = streamProvider.GetStream<string>(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).
|
|
||||||
@ -113,19 +113,12 @@ class Build : NukeBuild
|
|||||||
.DependsOn(Pack, CreateAndPushGitTag)
|
.DependsOn(Pack, CreateAndPushGitTag)
|
||||||
.Executes(() =>
|
.Executes(() =>
|
||||||
{
|
{
|
||||||
try
|
DotNetTasks.DotNetNuGetAddSource(c => c
|
||||||
{
|
.EnableStorePasswordInClearText()
|
||||||
DotNetTasks.DotNetNuGetAddSource(c => c
|
.SetUsername(GiteaPackageOwnerUser)
|
||||||
.EnableStorePasswordInClearText()
|
.SetPassword(GiteaPackageOwnerPassword)
|
||||||
.SetUsername(GiteaPackageOwnerUser)
|
.SetName("Gitea")
|
||||||
.SetPassword(GiteaPackageOwnerPassword)
|
.SetSource($"{GiteaNugetSourceName}/index.json"));
|
||||||
.SetName("Gitea")
|
|
||||||
.SetSource($"{GiteaNugetSourceName}/index.json"));
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Log.Warning("Error adding Gitea source: {e}", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
DotNetTasks.DotNetNuGetPush(s => s
|
DotNetTasks.DotNetNuGetPush(s => s
|
||||||
.SetSource($"{GiteaNugetSourceName}/symbols")
|
.SetSource($"{GiteaNugetSourceName}/symbols")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user