Redis 訊息佇列中的非同步場景封裝

2021-10-07 07:52:02 字數 3808 閱讀 1603

場景樣式:

積分服務和簡訊服務訂閱訊息佇列,訊息佇列推送訊息到積分服務,簡訊服務,這樣建立訂完單響應給客戶端只需要花費1s,但是又不會影響訂單服務的併發量。

準備工作:

安裝windows下的redis.

在專案中新增引用服務:servicestack.redis

1.建立乙個專案:myredis

1.1建立乙個非同步的類:rmorder來進行訂單積分和簡訊傳送

```csharp

using myredis.mq;

using system;

using system.collections.generic;

using system.data.odbc;

using system.diagnostics;

using system.linq;

using system.text;

using system.threading;

using system.threading.tasks;

namespace myredis.async

儲存成功");

2.新增積分

"*********************開始呼叫積分服務*********************");

//rmorderpoints rmorderpoints = new rmorderpoints();

"*********************積分服務呼叫完成*********************");

3.傳送簡訊

"*********************開始呼叫簡訊服務*********************");

//rmordersms rmordersms = new rmordersms();

"*********************簡訊服務呼叫完成*********************");

//redis 優化

using (var messagequeue = new redismessagequeue("localhost:6379"))

stopwatch.stop();

console.writeline($"訂單完成耗時: ms");

return order_sn;

}/// /// 訂單生成器

///

///

private string ordergenrator()}}

1.2建立乙個類:redismessagequeue來封裝redis的訊息佇列,繼承idisposable

```csharp

using servicestack.redis;

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace myredis.mq

public redismessagequeue(string redishost)

/// /// 入隊

///

/// 入隊key

/// 入隊訊息

///

public long enqueue(string qkey, string qmessage)

/// /// 出隊(非阻塞)==拉

///

/// 入隊key

///

public string dequeue(string qkey)

else

return qmessage;

}/// /// 出隊(阻塞)==推,資料實時性高

///

/// 入隊key

/// 阻塞超時時間

///

public string bdequeue(string qkey,timespan? timespan)

/// /// 獲取佇列數量

///

/// 佇列key

///

public long getqueuecount(string qkey)

public void dispose()}}

2.新增乙個新建項:myredisrmpoints 根據訂單增加積分以及反饋積分訊息

2.1.新增類 rmorderpoints

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading;

using system.threading.tasks;

namespace myredisrmpoints.async

成功");}}}

2.1.在program裡面進行積分訊息的優化

using myredisrmpoints.async;

using myredisrmpoints.mq;

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace myredisrmpoints}}

}}

3.新增乙個新建項:myredisrmsms 根據訂單傳送簡訊以及反饋簡訊傳送狀態

2.1.新增類 rmordersms

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading;

using system.threading.tasks;

namespace myredisrmsms.async

成功");}}}

2.2.在program裡面進行傳送簡訊的優化

using myredisrmsms.async;

using myredisrmsms.mq;

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace myredisrmsms}}

}}

4.在myredis專案裡的program中完成對訂單的非同步呼叫服務、

rmorder rmorder =

newrmorder()

;rmorder.

createorder()

;

5.重新生成各個專案,在資源資料夾之中找到對應的dubug目錄,進行服務呼叫

Redis 非同步訊息佇列與延時佇列

非同步訊息佇列 說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢...

Redis應用 非同步訊息佇列與延時佇列

說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢話補不多說上 r...

Redis應用 非同步訊息佇列與延時佇列

原文 說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢話補不多說...