日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis学习笔记~分布式的Pub/Sub模式

發(fā)布時(shí)間:2023/12/9 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis学习笔记~分布式的Pub/Sub模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

redis的客戶端有很多,這次用它的pub/sub發(fā)布與訂閱我選擇了StackExchange.Redis,發(fā)布與訂閱大家應(yīng)該很清楚了,首先一個(gè)訂閱者,訂閱一個(gè)服務(wù),服務(wù)執(zhí)行一些處理程序(可能是寫個(gè)日志,插入個(gè)數(shù)據(jù),發(fā)個(gè)email)然后當(dāng)另一個(gè)項(xiàng)目的某個(gè)業(yè)務(wù)發(fā)布這個(gè)服務(wù)后,被訂閱的程序?qū)?huì)被執(zhí)行,這個(gè)聽起來很有意思,redis有好的實(shí)現(xiàn)了這個(gè)pub/sub功能。

看一下結(jié)構(gòu)圖

?

Sub訂閱(消息消費(fèi)者)

對(duì)于訂閱方,這里類似于一個(gè)服務(wù),它會(huì)長期運(yùn)行著,被啟動(dòng)后動(dòng)態(tài)訂閱一些服務(wù)進(jìn)來,以便以后再被其它服務(wù)調(diào)用

     //sub a function in A-projectPubSubManager.Instance.Subscribe("UserLog", (msg) =>{//訂閱者處理自己的業(yè)務(wù)邏輯,這相關(guān)于隊(duì)列服務(wù)要干的事 Console.WriteLine(msg);});

Pub發(fā)布(消息生產(chǎn)者)

而對(duì)于其它項(xiàng)目,如A網(wǎng)站,它可能在被在POST動(dòng)作后發(fā)布這個(gè)UserLog的服務(wù),這時(shí)上面的訂閱方將會(huì)消費(fèi)它(消費(fèi)者模式),或者服務(wù)代碼被執(zhí)行!

    [HttpPost]public ActionResult Index(string user){PubSubManager.Instance.Publish("UserLog", user + "這個(gè)用戶提交表單了");return View();}

對(duì)于一直運(yùn)行的服務(wù),將會(huì)收到來自不同項(xiàng)目的消息,而它只負(fù)責(zé)消費(fèi)它!

Lind.DDD.PublishSubscribe

封裝了一些標(biāo)準(zhǔn)的pub/sub方法,它可以有多種實(shí)現(xiàn)方法,本例使用redis這個(gè)中間件

   /// <summary>/// 發(fā)布訂閱的接口規(guī)則/// </summary>public interface IPubSub{/// <summary>/// 發(fā)布,有順序,對(duì)象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void Publish(string channel, string value);/// <summary>/// 訂閱,對(duì)象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void Subscribe(string channel, Action<string> action);/// <summary>/// 異步發(fā)布,無順序,對(duì)象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishAsync(string channel, string value);/// <summary>/// 異步訂閱,無順序,對(duì)象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeAsync(string channel, Action<string> action);/// <summary>/// 發(fā)布,有順序,對(duì)象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishByte(string channel, byte[] value);/// <summary>/// 訂閱,對(duì)象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeByte(string channel, Action<byte[]> action);/// <summary>/// 異步發(fā)布,有順序,對(duì)象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishByteAsync(string channel, byte[] value);/// <summary>/// 異步訂閱,對(duì)象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeByteAsync(string channel, Action<byte[]> action);/// <summary>/// 發(fā)布,有順序,對(duì)象源是泛型對(duì)象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="value"></param>void Publish<T>(string channel, T value);/// <summary>/// 訂閱,對(duì)象源是泛型對(duì)象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="action"></param>void Subscribe<T>(string channel, Action<T> action);/// <summary>/// 異步發(fā)布,有順序,對(duì)象源是泛型對(duì)象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="value"></param>void PublishAsync<T>(string channel, T value);/// <summary>/// 異步訂閱,對(duì)象源是泛型對(duì)象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeAsync<T>(string channel, Action<T> action);/// <summary>/// 取消指定訂閱/// </summary>/// <param name="channel"></param>void UnSubscribe(string channel);/// <summary>/// 取消所有訂閱/// </summary>/// <param name="channel"></param>void UnSubscribeAll();}

?本文轉(zhuǎn)自博客園張占嶺(倉儲(chǔ)大叔)的博客,原文鏈接:Redis學(xué)習(xí)筆記~分布式的Pub/Sub模式,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原博主。

總結(jié)

以上是生活随笔為你收集整理的Redis学习笔记~分布式的Pub/Sub模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。