將 Wolverine 接上 RabbitMQ - 使用 WolverineFx.RabbitMQ

  • 153
  • 0
  • C#
  • 2024-10-26

前一篇「使用 Wolverine 實作生產者-消費者模式(Producer-Consumer Pattern)」介紹了將原本使用 Channels + BackgroundService 的生產者-消費者模式改用 Wolverine  來實作。

就以現實的問題來看,如果服務是相當頻繁地被使用時,如果 MessageCreatedEventHandler 消費者的處理速度有所延遲,那麼 Channels 裡就會堆積大量的 MessageCreatedEvent 事件,一旦服務出現問題而重新啟動或是有版本更新而需要重新部署,那麼佇列在 Channels 裡的事件就會消失不見了,這可是不得了的事情。所以這篇就來用 WolverineFx.RabbitMQ,生產者將事件發送到 RabbitMQ 裡,然後消費者再去接收存放在 RabbitMQ 裡的訊息,如此的改變就是為了避免因為服務重新啟動而讓佇列在 Channels 裡的事件消失不見。

...繼續閱讀 »

使用 Wolverine 實作生產者-消費者模式(Producer-Consumer Pattern)

  • 167
  • 0
  • C#
  • 2024-10-21

之前寫了一篇「使用 Channels 與 BackgroundService 實作生產者-消費者模式(Producer-Consumer Pattern)」是使用 Channels 與 BackgroundService 來實作,而這一次就來改用 Wolverine 這個套件來試試看。

有關 Wolverine 這個套件我也看了好久,一直想拿來試試看,會想要用這個套件,主要是它是一個輕量化的工具,適合用於整合訊息佇列、事件驅動設計和後台任務處理。

而且也因為適合用於整合訊息佇列、事件驅動設計,所以支援了許多第三方服務,例如:RabbitMQ, Kafaka, MQTT, AzureServiceBux, AmazonSqs 等,所以打算之後也繼續玩玩 Wolverine。

...繼續閱讀 »

使用 Channels 與 BackgroundService 實作生產者-消費者模式(Producer-Consumer Pattern)

  • 572
  • 0
  • C#
  • 2024-10-16

過去的工作專案為了要加快 Request 的回應速度,所以就想方設法地去做了很多的調整…

例如一個訊息建立後要做很多的事情,像是要許多相關資料 Table 的資料異動、透過 RabbitMQ 去發送 message 通知其他 Client、快取資料的更新等等等

這麼多的處理如果都是在一個 Request 裡全部處理完成後才回傳 Response 結果,因為每個處理都會花費一些時間,全部累積起來就相當可觀,於是就會想到是不是要往平行處理或多執行緒的方式來解決,但是在繁忙的網站服務去使用這些解決方案又有很多風險,程式沒有寫好的話就會出現嚴重錯誤。

所以就想到用發送事件的方式,當訊息建立完成後,就發送一個事件到一個佇列裡,然後有一個 BackgroundService 去專門接收訊息建立完成事件,當收到事件後就開始一連串的處理,這麼一來 Action 方法的回應時間就能夠加快一些。

...繼續閱讀 »

背景服務執行週期性工作 - 使用 BackgroundService 與 Sgbj.Cron.CronTimer

  • 832
  • 0
  • C#
  • 2024-10-21

上一篇「背景常駐執行計時工作 - 使用 BackgroundService 與 PeriodicTimer」介紹了使用 BackgroundService 與 PeriodicTimer 實作計時的工作處理。

但如果有時候一些工作處理並不是每幾秒鐘或每幾分鐘、每幾個小時這樣的週期行為時,使用 PeriodicTimer 就無法滿足這樣的需求,而在使用 Hangfire 建立 Recurring Job 時都會使用到 Cron Expression 去定義工作的執行週期,而就有看到這麼一個 NuGet 套件就有提供這樣的功能,所以就拿來試試看。

...繼續閱讀 »

背景服務執行計時工作 - 使用 BackgroundService 與 PeriodicTimer

  • 836
  • 0
  • C#
  • 2024-10-21

背景常駐執行計時工作的實作方式有很多種,而我習慣在 ASP.NET Coe Web Application 使用 BackgroundService 然後搭配 Task.Delay 的方式來完成計時執行工作的處理,而在 .NET 6 提供了 PeriodicTimer 後就可以更方便的處理計時工作,這篇就來認識執行計時工作的幾種實作方式。

...繼續閱讀 »

使用 Microsoft.Bcl.TimeProvider 取代 DateTime 吧

我想很多人看到標題後都會直接想
「程式裡直接用 DateTime  難道錯了嗎?」
「DateTime  用得好好的,為什麼要改用 Microsoft.Bcl.TimeProvider ?」
「我又不必寫測試,我就是要用 DateTime!」

我也管不著各位想怎麼用、想怎麼寫程式,只是看到很多有關於交易處理的程式都是跟時間判斷有關,而且有著種種原因而沒有寫測試,就讓人覺得那些產品妥當嗎?
而且一遇到 DateTime 的處理,就會卡在不知道如何寫測試。

所以就來寫這一篇簡單介紹 Microsoft.Bcl.TimeProvider

...繼續閱讀 »

Guid TryParse

  • 897
  • 0
  • C#
  • 2010-08-31

日前在專案執行上突然有個需求,就是要對輸入的資料做Guid格式的驗證,
一開始就下意識去找Guid下的TryParse方法,這個時候才發現 .NET 3.5(2.0) 的Guid是沒有TryParse方法…
細查下去才知道,Guid的TryParse與Parse方法在 .NET 4.0才新加入(小弟真是才疏學淺…汗顏…),
之前經常使用Guid,卻甚少對Guid的格式驗證稍加留意。

...繼續閱讀 »