如何使Redis通知我的服务有关事件

Fallingsappy

我有一台装有Redis的远程计算机。有时会向其中添加新条目(键值对)。我希望Redis将有关此类事件的通知发送到C#服务(我对价值部分感兴趣)。我在网上搜索并找到了简单的代码示例,以将我的服务订阅到Redis。如何使Redis发送通知?

服务:

public partial class ResultsService : ServiceBase
{
    private ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(ConfigurationManager.AppSettings["RedisConnection"]);

    private const string ChatChannel = "__keyspace@0__:*";

    public VerificationResultsService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        Start();
    }

    public void Start()
    {
        var pubsub = connection.GetSubscriber();

        pubsub.Subscribe(ChatChannel, (channel, message) => MessageAction(message));

        while (true)
        {

        }
    }

    private static void MessageAction(RedisValue message)
    {
         // some handler...
    }
}
马克·格雷韦尔

使redis发送自动的密钥空间通知是redis服务器配置的一部分,可以通过.conf文件(notify-keyspace-events)或CONFIG SET在运行时启用它相关文档在这里

您可以通过示例代码查看其工作方式:

using StackExchange.Redis;
using System;
using System.Linq;

static class P
{
    private const string ChatChannel = "__keyspace@0__:*";
    static void Main()
    {
        // connect (allowAdmin just lets me use ConfigSet)
        using var muxer = ConnectionMultiplexer.Connect("127.0.0.1,allowAdmin=true");

        // turn on all notifications; note that this is server-wide
        // and is NOT just specific to our connection/code
        muxer.GetServer(muxer.GetEndPoints().Single())
             .ConfigSet("notify-keyspace-events", "KEA"); // KEA=everything

        // subscribe to the event
        muxer.GetSubscriber().Subscribe(ChatChannel,
            (channel, message) => Console.WriteLine($"received {message} on {channel}"));

        // stop the client from exiting
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }
}

它的工作原理如下:

在此处输入图片说明


但是,在许多情况下,您可能会发现这太“嘈杂”,您可能更喜欢使用在执行需要通知的操作手动发布的自定义命名事件,或者(再次手动)使用功能消耗数据流(可以将流视为“发生的事情”,但不通过pub / sub传递)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何播放与时间有关的事件

Structure 如何正确地通知其他线程有关事件的信息?

Opendaylight:获取有关流程未命中事件的通知

获取有关Redis到期通知的价值

如何找到有关服务的信息?

如何实现有关服务器更新的通知?

如何获得有关Azure服务的重大更改的通知?

服务器如何获得有关HTTP请求的通知?

如何查看有关服务器发送事件的错误?

我们如何才能通知ObservableObject有关其初始化程序的更改?

ASM如何通知我有关强制类型转换和构造函数调用的类型注释

我如何使用bitcoinj接收有关新区块的通知

如何阻止Fedora通知我有关Node.js的更新?

如何通知我的 Alexa Skill 的客户有关新功能的信息?

有关使用IMvxMessenger与使用基于服务的事件的建议

有没有办法通知服务器有关退回的推送通知

如何获取有关新的可用Wifi网络的通知

如何通知有关GlobalKTable状态存储的更新?

如何从堆栈溢出获取有关新问题的通知?

cpu如何通知内核有关硬件异常的信息?

UICollectionViewDatasource如何通知UICollectionView有关更改?

如何通知家长有关孩子组成的变化?

如何接收有关表更改的自动通知?

如何获得有关按钮点击的通知?

我如何收到有关我的服务正在被卸载的通知?

Nginx服务实际上未运行时,如何消除与旅客有关的Sensu通知?

每次我使用ssh时,都会收到有关登录尝试失败的通知。如何停止呢?

没有收到有关大文件的AWS S3 PUT事件的通知

AngularJS通知Collapsibile指令中的指令有关崩溃事件的最佳方法