場景樣式:
積分服務和簡訊服務訂閱訊息佇列,訊息佇列推送訊息到積分服務,簡訊服務,這樣建立訂完單響應給客戶端只需要花費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資料結構來實現訊息佇列.主要使用到如下命令 廢話補不多說...