新進文章

將 Wolverine 接上 RabbitMQ - 使用 WolverineFx.RabbitMQ

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

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

...繼續閱讀 »
on mrkt

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

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

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

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

...繼續閱讀 »
on mrkt

DATATABLE.JS 應用

是 jQuery Javascript 庫的插件。它是一種高度靈活的工具,針對處理table資料非常方便,只要引入此套件就有像是分頁、搜尋、排序…等功能,也提供多項客製化選項

...繼續閱讀 »
on Flaming_DeBug

ASP.NET Core WebApi - 來試試看 Scalar

從 .NET Framework  開發 WebApi 服務時就開始使用 Swagger UI,直到現在都已經是直接在預設的 ASP.NET Core WebApi 專案範本裡就包含在內。

但是…  我一直都覺得 Swagger UI 做為 API 文件工具並不是很好閱讀,要查看輸入參數或輸出資料格式內容都不是那麼方便,我想大家或多或少應該都有這樣的感覺,所以我都還會在專案裡安裝 ReDoc 套件,ReDoc 做為 API 文件工具來檢視 API 的輸出入各種資訊都相當直觀且清楚,比 Swagger UI 更好閱讀,但是 ReDoc 只是個單純的 API 文件檢視工具,無法在 ReDoc 裡測試執行 API。

所以之前看到 Scalar 這個新的 API 文件檢視工具時就讓我眼睛一亮,有著如同 ReDoc 一般的 UI 外觀,可以方便且直覺地查看 API Endpoints 的資訊,而且還可以直接在上面測試執行 API,所以就趕緊來試試看。

...繼續閱讀 »
on mrkt

如何取得 class 裡的 private property/field

在偵錯一些資料時,實體型別裡的資料有時是繼承而來

而物件裡的方法,也常常會使用到基底的方法或是參數

雖然這些資料的出發點是不希望開發者去在意的

若是可以拿到這些資料,在偵錯上有時反而可以幫上一些忙

...繼續閱讀 »
on AceLee

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

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

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

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

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

...繼續閱讀 »
on mrkt

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

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

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

...繼續閱讀 »
on mrkt

如何透過 GitHub Copilot 與 Azure AI Content Safety 確保程式碼授權合規性

  • 32

現在生成式 AI 發展越來越快,也越來越多開發人員使用來產生程式碼的建議,但是對於企業來說除了考慮程式碼會不會被拿出去訓練之外的問題,就是要確保產生的程式碼是否有使用到公開的程式碼,有使用的話又是哪種授權,避免一不小心就產生的著作權的問題,本文就來介紹使用 GitHub Copilot 的時候該如何判斷,以及透過 Azure AI Content Safety 來判斷非 GitHub Copilot 產生的程式碼如何判斷是否有用到公開程式碼。

...繼續閱讀 »
on anyun

ASP.net core gRPC Webapi 架設在IIS上

以往工作的經驗都是將程式交給IIS託管
此次也是採用IIS但微軟上有提供第二種方式Windows service
以上兩種做法都可以做到OS重啟時,系統自行重啟
對於RD來說真是懶人福音

本次打算分Port且在同一支ASP.net同時使用gRPC與Webapi

...繼續閱讀 »
on rainchou

練習題 - 設計模式 - 使用 PipelineNet 實作責任鍊模式 (職責鍊模式) Chain of Responsibility Pattern

前一篇文章「練習題 - 設計模式 - 責任鍊模式 (職責鍊模式) Chain of Responsibility Pattern」是不藉助任何套件的方式下完成實作,但我總會想應該是有人會做個 NuGet 套件來讓開發者可以直接套用就能夠完成責任鍊模式的實作,找了一輪後發現到還蠻少的,雖然少但也還是有一些,不過有的是已經很久沒有更新或是用的人不多,而有些是不適合真的拿來使用,有這種情況大概是責任鍊模式的實作其實並不複雜。

不過還是有找到一個還可以的套件,所以就拿來用在之前的練習題裡,看看是不是適合。

...繼續閱讀 »
on mrkt

使用 Github Authentication Method,訪問 Hashicorp Vault Server 機密性資源

前面提到的案例都是使用 root token 進行登入。登入後,通過身分驗證 (Authentication),接著依照定義的 ACL Policy 和 Role 來決定誰能訪問哪些資源,這個過程稱為授權 (Authorization)。由於 root token 具有最高權限,理論上應避免壤非管理人員使用它。現在,我們來看看如何使用 HashiCorp Vault Server 的 GitHub Authentication Method 訪問機敏性資源吧!

...繼續閱讀 »
on yc421206

練習題 - 設計模式 - 責任鍊模式 (職責鍊模式) Chain of Responsibility Pattern

工作專案裡並不會去刻意地去使用設計模式,不過在很多時候為了想要有更好的實作,又或者是覺得當下的程式一定會有更好的解法,就會去找目前情境所適合使用的設計模式來改寫。

有的時後會看到誤用了不適合的設計模式所實作的程式,明明應該是用行為類的設計模式來做,卻用了結構類的設計模式來做,雖然最後的執行結果是有符合預期,但怎麼看就怎麼怪,所以設計模式還是要好好地認識認識,於是這次就來練習練習責任鍊模式。

...繼續閱讀 »
on mrkt

保護你的機敏性資料,通過 C# VaultSharp 訪問 Hashicorp Vault - 快速入門

開發者不應該把機敏性資料,用明碼的方式存放在電腦,HashiCorp Vault 是一套基於身份的私鑰和加密管理系統,Hashicorp Vault 是一個安全管理工具,專門用於管理機敏性資料,例如:密碼、API 密鑰和其他機密訊息,下圖出自 Introduction | Vault | HashiCorp Developer

原本我本來想要自幹一套 Secret Manager / Config Manage,因為有 Vault 我省去了自幹的時間,這裡,我將嘗試學習使用 C# VaultSharp 訪問 Hashicorp Vault

...繼續閱讀 »
on yc421206

通過 ODBC 訪問 PostgreSQL

甚麼是 ODBC,維基百科這樣說

"ODBC(Open Database Connectivity,開放資料庫互連)提供了一種標準的 API( 應用程式編程介面)方法來訪問資料庫管理系統(DBMS)。ODBC 的運用形態通常是由應用程式經過一個稱之為 ODBC 管理器的工具,建立一個 DSN,指明需要呼叫的 ODBC 驅動程式,從而訪問對應的資料庫。"

簡單來說,可以透過 ODBC 來簡化連線字串的管理,最近工作上,需要用到它,趕緊趁無風無雨的颱風天,重新學習一下。

...繼續閱讀 »
on yc421206

進修課程