<!doctype html><html lang=zh-tw><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge,chrome=1"><title>Yowko's Notes</title><meta name=google-site-verification content=DvajWUA2XrtSgjsnGxXQKihwijBDiTFw9g7cxFY-Ivk><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><meta http-equiv=cache-control content=no-transform><meta http-equiv=cache-control content=no-siteapp><meta name=theme-color content=#f8f5ec><meta name=msapplication-navbutton-color content=#f8f5ec><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=#f8f5ec><meta name=author content="Yowko Tsai"><meta name=description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta name=keywords content=yowko,.net,blog><meta name=generator content="Hugo 0.56.3"><meta name=msvalidate.01 content=FA1ADBDB8F0BBBD0F7F4E65CDEBF7898><link rel=canonical href=https://blog.yowko.com/><link href=https://blog.yowko.com/index.xml rel=alternate type=application/rss+xml title="Yowko's Notes"><link href=https://blog.yowko.com/index.xml rel=feed type=application/rss+xml title="Yowko's Notes"><link rel=apple-touch-icon sizes=180x180 href=https://blog.yowko.com/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://blog.yowko.com/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://blog.yowko.com/favicon-16x16.png><link rel=manifest href=https://blog.yowko.com/manifest.json><link rel=mask-icon href=https://blog.yowko.com/safari-pinned-tab.svg color=#5bbad5><link href="https://blog.yowko.com/dist/even.min.css?v=3.2.0" rel=stylesheet><link href=https://blog.yowko.com/lib/fancybox/jquery.fancybox-3.1.20.min.css rel=stylesheet><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.2.0/css/all.css integrity=sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ crossorigin=anonymous><meta property=og:title content="Yowko's Notes"><meta property=og:description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta property=og:type content=website><meta property=og:url content=https://blog.yowko.com/><meta property=og:updated_time content=2025-02-17T00:30:00+08:00><meta itemprop=name content="Yowko's Notes"><meta itemprop=description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta name=twitter:card content=summary><meta name=twitter:title content="Yowko's Notes"><meta name=twitter:description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><!--[if lte IE 9]><script src=https://cdnjs.cloudflare.com/ajax/libs/classlist/1.1.20170427/classList.min.js></script><![endif]--><!--[if lt IE 9]><script src=https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js></script><script src=https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js></script><![endif]--><link href=https://blog.yowko.com/opensearch.xml rel=search title="Content search" type=application/opensearchdescription+xml></head><body><div id=mobile-navbar class=mobile-navbar><div class=mobile-header-logo><a href=https://blog.yowko.com/ class=logo>Yowko's Notes</a></div><div class=mobile-navbar-icon><span></span><span></span><span></span></div></div><nav id=mobile-menu class="mobile-menu slideout-menu"><ul class=mobile-menu-list><a href=https://blog.yowko.com/><li class=mobile-menu-item>首頁</li></a><a href=https://blog.yowko.com/post/><li class=mobile-menu-item>歷史筆記</li></a><a href=https://blog.yowko.com/tags/><li class=mobile-menu-item>內容標籤</li></a><a href=https://blog.yowko.com/search><li class=mobile-menu-item>站內搜尋</li></a></ul></nav><div class=container id=mobile-panel><header id=header class=header style=height:118px;padding-bottom:0><div class=logo-wrapper><a href=https://blog.yowko.com/ class=logo>Yowko's Notes</a></div><div style=padding-bottom:60px></div></nav><nav class=site-navbar><ul id=menu class=menu><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/>首頁</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/post/>歷史筆記</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/tags/>內容標籤</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/search>站內搜尋</a></li></ul></nav></header><main id=main class=main><div class=content-wrapper><hr style="border-top:1px solid #e6e6e6;border-bottom:0;padding:0"><div id=content class=content><section id=posts class=posts><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/docke-compose-mongodb-replica-set/>使用 docker compose 建立 MongoDB replica set</a></h1><div class=post-meta><span class=post-time>2025-02-17</span>
<span class=more-meta>約 715 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 docker compose 建立 MongoDB replica set 之前團隊對於 MongoDB 大多還是定位在 document database 上,交易類型的操作還是仰賴傳統 relation database,近期團隊有意減少團隊的 database 種類,嘗試開始逐</div><div class=read-more><a href=https://blog.yowko.com/docke-compose-mongodb-replica-set/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/aspnetcore-minimal-api-text-json/>ASP.NET minimal API 解析 text/json</a></h1><div class=post-meta><span class=post-time>2025-01-24</span>
<span class=more-meta>約 579 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>ASP.NET minimal API 解析 text/json 這個需求一樣來自之前筆記 ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯 中所提到的舊系統,不過這次不是打錯字XD 舊系統使用 web api controller 來接收 post 傳遞的 m</div><div class=read-more><a href=https://blog.yowko.com/aspnetcore-minimal-api-text-json/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/aspnetcore-minimal-api-multiple-route-patterns/>ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯</a></h1><div class=post-meta><span class=post-time>2025-01-23</span>
<span class=more-meta>約 538 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯 這個需求來自一個內部共用服務的 API 上,之前同事在建立處理邏輯時,不慎將 controller name 打錯,預計使用 Text 但打成 Test,導致</div><div class=read-more><a href=https://blog.yowko.com/aspnetcore-minimal-api-multiple-route-patterns/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/rabbitmq-shovel-exchange/>使用 Shovel Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞</a></h1><div class=post-meta><span class=post-time>2024-12-24</span>
<span class=more-meta>約 618 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Shovel Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 這是之前筆記 使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 的延伸,雖然上次已經排除 RabbitMQ 過新的問題,但沒想到在實際使用 Federated Exchange 時,卻遇到 .NET</div><div class=read-more><a href=https://blog.yowko.com/rabbitmq-shovel-exchange/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nuget-central-package-management/>NuGet Central Package Management 集中套件管理,簡化套件相依管理</a></h1><div class=post-meta><span class=post-time>2024-12-23</span>
<span class=more-meta>約 1384 字</span>
<span class=more-meta>預計閱讀 3 分鐘</span></div></header><div class=post-content><div class=post-summary>NuGet Central Package Management 集中套件管理,簡化套件相依管理 隨著專案日漸擴大,package 相依性也越來越複雜,尤其是在多個專案中使用相同的 package,當 package 更</div><div class=read-more><a href=https://blog.yowko.com/nuget-central-package-management/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/rabbitmq-federated-exchange/>使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞</a></h1><div class=post-meta><span class=post-time>2024-12-10</span>
<span class=more-meta>約 1029 字</span>
<span class=more-meta>預計閱讀 3 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 想讓多個 consumer 可以收到同一個 RabbitMQ 訊息,你會怎麼做呢?我第一念頭是使用 Kafka 哈哈,如果限制只能用 RabbitMQ,我覺得 RabbitMQ Streams</div><div class=read-more><a href=https://blog.yowko.com/rabbitmq-federated-exchange/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/debug-source-generators-incremental-generators/>使用 JetBrains Rider 來 Debug Source Generators 或 Incremental Generators</a></h1><div class=post-meta><span class=post-time>2024-12-06</span>
<span class=more-meta>約 559 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 JetBrains Rider 來 Debug Source Generators 或 Incremental Generators 之前筆記 使用 Source Generators 來為 method 加上時間測量 與 使用 Incremental Generators 來為 method 加上時間測量 紀錄到如何使用 Source Generators 與 Incremental Generators 來為 method 加上 stopwatch 測量 method 的執行時間,但</div><div class=read-more><a href=https://blog.yowko.com/debug-source-generators-incremental-generators/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/incremental-generators-stopwatch/>使用 Incremental Generators 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-12-05</span>
<span class=more-meta>約 2206 字</span>
<span class=more-meta>預計閱讀 5 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Incremental Generators 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄了使用在 .NET 7 所發表 Stopwatch 的新 api 來測量程式執行時間以避免 memory allocate,接著就想起 Metho</div><div class=read-more><a href=https://blog.yowko.com/incremental-generators-stopwatch/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/source-generators-stopwatch/>使用 Source Generators 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-12-03</span>
<span class=more-meta>約 2576 字</span>
<span class=more-meta>預計閱讀 6 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Source Generators 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄了使用在 .NET 7 所發表 Stopwatch 的新 api 來測量程式執行時間以避免 memory allocate,接著就想起 Metho</div><div class=read-more><a href=https://blog.yowko.com/source-generators-stopwatch/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/measure-method-performance-with-methodtimer-fody/>使用 MethodTimer.Fody 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-11-27</span>
<span class=more-meta>約 583 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 MethodTimer.Fody 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄到如何使用 Stopwatch 的新 API,讓我想起過去常使用的 GitHub:MethodTimer.Fody 也是透過 Stopwatch.StartNew() 方式來計算時間,回頭確認是否有更新時</div><div class=read-more><a href=https://blog.yowko.com/measure-method-performance-with-methodtimer-fody/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/stopwatch-best-practice/>Stopwatch 的正確用法</a></h1><div class=post-meta><span class=post-time>2024-11-22</span>
<span class=more-meta>約 607 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>Stopwatch 的正確用法 前幾天從 Cash 大的粉專上看到 Cash Wu Geek 分享了 youtuber-Nick Chapsas 對於 Stopwatch 的正確用法:Youtube:How to Measure Time Correctly in .NET,覺得值得仔細了解一下,快速筆</div><div class=read-more><a href=https://blog.yowko.com/stopwatch-best-practice/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/dotnet9-csharp13-lock/>隨 .NET9 SDK 推出的 C#13 新增 Lock 類別與用法</a></h1><div class=post-meta><span class=post-time>2024-11-07</span>
<span class=more-meta>約 692 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>隨 .NET9 SDK 推出的 C#13 新增 Lock 類別與用法 在 C# 中,lock 語法確保程式碼區塊的執行不會被其他 thread 影響。過去 lock 語法就是 System.Threading.Monitor 的語法糖,編譯器產生的程式碼等於使用</div><div class=read-more><a href=https://blog.yowko.com/dotnet9-csharp13-lock/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/download-youtube-private-video/>下載 youtube 私人影片</a></h1><div class=post-meta><span class=post-time>2024-10-21</span>
<span class=more-meta>約 523 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>下載 youtube 私人影片 陸陸續續上傳了一些家庭影片在 youtube,並設定成私人影片,原本的想法是透過 youtube 來備份影片,或是需要播放時可以隨時隨地開啟,不</div><div class=read-more><a href=https://blog.yowko.com/download-youtube-private-video/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nexus-docker-multi-arch-pull-push/>將 Docker Multi-arch image 搬移至另個 registry 以 Nexus Repository 為例</a></h1><div class=post-meta><span class=post-time>2024-10-18</span>
<span class=more-meta>約 567 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>將 Docker Multi-arch image 搬移至另個 registry 以 Nexus Repository 為例 這個需求也是因為團隊 Nexus Repository server 的用量太高,造成服務中斷,進而影響到 CI/CD 流程,團隊的開發進度也多少受到影響,所以決定啟</div><div class=read-more><a href=https://blog.yowko.com/nexus-docker-multi-arch-pull-push/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nexus-docker-pull-push/>將 Docker image 搬移至另個 registry 以 Nexus Repository 為例</a></h1><div class=post-meta><span class=post-time>2024-10-16</span>
<span class=more-meta>約 550 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>將 Docker image 搬移至另個 registry 以 Nexus Repository 為例 這個需求也是因為團隊 Nexus Repository server 的用量太高,造成服務中斷,進而影響到 CI/CD 流程,團隊的開發進度也多少受到影響,所以決定啟用</div><div class=read-more><a href=https://blog.yowko.com/nexus-docker-pull-push/ class=read-more-link>繼續閱讀</a></div></div></article></section><nav class=pagination><a class=next href=https://blog.yowko.com/page/2/><span class=next-text>下一頁</span>
<i class="iconfont icon-right"></i></a></nav></div></div></main><footer id=footer class=footer><div class=social-links><a href="/cdn-cgi/l/email-protection#d4adbba3bfbb94adbba3bfbbfab7bbb9" class="iconfont icon-email" title=email></a><a href=https://www.linkedin.com/in/yowko/ class="iconfont icon-linkedin" title=linkedin></a><a href=https://github.com/yowko class="iconfont icon-github" title=github></a><a href=https://blog.yowko.com/index.xml type=application/rss+xml class="iconfont icon-rss" title=rss></a></div><div class=copyright><span class=power-by>由 <a class=hexo-link href=https://gohugo.io>Hugo</a> 強力驅動</span>
<span class=division>|</span>
<span class=theme-info>主題 -
<a class=theme-link href=https://github.com/huanlin/hugo-theme-even-more>Even More</a></span>
<span class=copyright-year>©
2016 -
2025
<span class=heart><i class="iconfont icon-heart"></i></span><span class=author>Yowko Tsai</span></span></div></footer><div class=back-to-top id=back-to-top><i class="iconfont icon-up"></i></div></div><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://blog.yowko.com/lib/highlight/highlight.pack.js?v=20171001"></script><script type=text/javascript src=https://blog.yowko.com/lib/jquery/jquery-3.2.1.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/slideout/slideout-1.0.1.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/fancybox/jquery.fancybox-3.1.20.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/instantclick/instantclick-3.0.1.min.js data-no-instant></script><script type=text/javascript src="https://blog.yowko.com/dist/even.min.js?v=3.2.0"></script><script type=application/javascript>var doNotTrack=false;if(!doNotTrack){window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;ga('create','G-7PF6W2W48Y','auto');ga('send','pageview');}</script><script async src=https://www.google-analytics.com/analytics.js></script></body></html>
<!doctype html><html lang=zh-tw><head><meta charset=utf-8><meta http-equiv=x-ua-compatible content="IE=edge,chrome=1"><title>Yowko's Notes</title><meta name=google-site-verification content=DvajWUA2XrtSgjsnGxXQKihwijBDiTFw9g7cxFY-Ivk><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1"><meta http-equiv=cache-control content=no-transform><meta http-equiv=cache-control content=no-siteapp><meta name=theme-color content=#f8f5ec><meta name=msapplication-navbutton-color content=#f8f5ec><meta name=apple-mobile-web-app-capable content=yes><meta name=apple-mobile-web-app-status-bar-style content=#f8f5ec><meta name=author content="Yowko Tsai"><meta name=description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta name=keywords content=yowko,.net,blog><meta name=generator content="Hugo 0.56.3"><meta name=msvalidate.01 content=FA1ADBDB8F0BBBD0F7F4E65CDEBF7898><link rel=canonical href=https://blog.yowko.com/><link href=https://blog.yowko.com/index.xml rel=alternate type=application/rss+xml title="Yowko's Notes"><link href=https://blog.yowko.com/index.xml rel=feed type=application/rss+xml title="Yowko's Notes"><link rel=apple-touch-icon sizes=180x180 href=https://blog.yowko.com/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://blog.yowko.com/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://blog.yowko.com/favicon-16x16.png><link rel=manifest href=https://blog.yowko.com/manifest.json><link rel=mask-icon href=https://blog.yowko.com/safari-pinned-tab.svg color=#5bbad5><link href="https://blog.yowko.com/dist/even.min.css?v=3.2.0" rel=stylesheet><link href=https://blog.yowko.com/lib/fancybox/jquery.fancybox-3.1.20.min.css rel=stylesheet><link rel=stylesheet href=https://use.fontawesome.com/releases/v5.2.0/css/all.css integrity=sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ crossorigin=anonymous><meta property=og:title content="Yowko's Notes"><meta property=og:description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta property=og:type content=website><meta property=og:url content=https://blog.yowko.com/><meta property=og:updated_time content=2025-02-17T00:30:00+08:00><meta itemprop=name content="Yowko's Notes"><meta itemprop=description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><meta name=twitter:card content=summary><meta name=twitter:title content="Yowko's Notes"><meta name=twitter:description content="半路出家的 web 工程師 喜歡嘗試不同新技術,更喜歡寫程式帶來的成就感 學藝不精,請大家多指教"><!--[if lte IE 9]><script src=https://cdnjs.cloudflare.com/ajax/libs/classlist/1.1.20170427/classList.min.js></script><![endif]--><!--[if lt IE 9]><script src=https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js></script><script src=https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js></script><![endif]--><link href=https://blog.yowko.com/opensearch.xml rel=search title="Content search" type=application/opensearchdescription+xml></head><body><div id=mobile-navbar class=mobile-navbar><div class=mobile-header-logo><a href=https://blog.yowko.com/ class=logo>Yowko's Notes</a></div><div class=mobile-navbar-icon><span></span><span></span><span></span></div></div><nav id=mobile-menu class="mobile-menu slideout-menu"><ul class=mobile-menu-list><a href=https://blog.yowko.com/><li class=mobile-menu-item>首頁</li></a><a href=https://blog.yowko.com/post/><li class=mobile-menu-item>歷史筆記</li></a><a href=https://blog.yowko.com/tags/><li class=mobile-menu-item>內容標籤</li></a><a href=https://blog.yowko.com/search><li class=mobile-menu-item>站內搜尋</li></a></ul></nav><div class=container id=mobile-panel><header id=header class=header style=height:118px;padding-bottom:0><div class=logo-wrapper><a href=https://blog.yowko.com/ class=logo>Yowko's Notes</a></div><div style=padding-bottom:60px></div></nav><nav class=site-navbar><ul id=menu class=menu><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/>首頁</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/post/>歷史筆記</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/tags/>內容標籤</a></li><li class=menu-item><a class=menu-item-link href=https://blog.yowko.com/search>站內搜尋</a></li></ul></nav></header><main id=main class=main><div class=content-wrapper><hr style="border-top:1px solid #e6e6e6;border-bottom:0;padding:0"><div id=content class=content><section id=posts class=posts><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/docke-compose-mongodb-replica-set/>使用 docker compose 建立 MongoDB replica set</a></h1><div class=post-meta><span class=post-time>2025-02-17</span>
<span class=more-meta>約 715 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 docker compose 建立 MongoDB replica set 之前團隊對於 MongoDB 大多還是定位在 document database 上,交易類型的操作還是仰賴傳統 relation database,近期團隊有意減少團隊的 database 種類,嘗試開始逐</div><div class=read-more><a href=https://blog.yowko.com/docke-compose-mongodb-replica-set/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/aspnetcore-minimal-api-text-json/>ASP.NET minimal API 解析 text/json</a></h1><div class=post-meta><span class=post-time>2025-01-24</span>
<span class=more-meta>約 579 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>ASP.NET minimal API 解析 text/json 這個需求一樣來自之前筆記 ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯 中所提到的舊系統,不過這次不是打錯字XD 舊系統使用 web api controller 來接收 post 傳遞的 m</div><div class=read-more><a href=https://blog.yowko.com/aspnetcore-minimal-api-text-json/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/aspnetcore-minimal-api-multiple-route-patterns/>ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯</a></h1><div class=post-meta><span class=post-time>2025-01-23</span>
<span class=more-meta>約 538 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>ASP.NET minimal API 將多個 route pattern 套用相同處理邏輯 這個需求來自一個內部共用服務的 API 上,之前同事在建立處理邏輯時,不慎將 controller name 打錯,預計使用 Text 但打成 Test,導致</div><div class=read-more><a href=https://blog.yowko.com/aspnetcore-minimal-api-multiple-route-patterns/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/rabbitmq-shovel-exchange/>使用 Shovel Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞</a></h1><div class=post-meta><span class=post-time>2024-12-24</span>
<span class=more-meta>約 618 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Shovel Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 這是之前筆記 使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 的延伸,雖然上次已經排除 RabbitMQ 過新的問題,但沒想到在實際使用 Federated Exchange 時,卻遇到 .NET</div><div class=read-more><a href=https://blog.yowko.com/rabbitmq-shovel-exchange/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nuget-central-package-management/>NuGet Central Package Management 集中套件管理,簡化套件相依管理</a></h1><div class=post-meta><span class=post-time>2024-12-23</span>
<span class=more-meta>約 1384 字</span>
<span class=more-meta>預計閱讀 3 分鐘</span></div></header><div class=post-content><div class=post-summary>NuGet Central Package Management 集中套件管理,簡化套件相依管理 隨著專案日漸擴大,package 相依性也越來越複雜,尤其是在多個專案中使用相同的 package,當 package 更</div><div class=read-more><a href=https://blog.yowko.com/nuget-central-package-management/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/rabbitmq-federated-exchange/>使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞</a></h1><div class=post-meta><span class=post-time>2024-12-10</span>
<span class=more-meta>約 1029 字</span>
<span class=more-meta>預計閱讀 3 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Federated Exchange 讓 RabbitMQ 跨 vhost 進行訊息傳遞 想讓多個 consumer 可以收到同一個 RabbitMQ 訊息,你會怎麼做呢?我第一念頭是使用 Kafka 哈哈,如果限制只能用 RabbitMQ,我覺得 RabbitMQ Streams</div><div class=read-more><a href=https://blog.yowko.com/rabbitmq-federated-exchange/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/debug-source-generators-incremental-generators/>使用 JetBrains Rider 來 Debug Source Generators 或 Incremental Generators</a></h1><div class=post-meta><span class=post-time>2024-12-06</span>
<span class=more-meta>約 559 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 JetBrains Rider 來 Debug Source Generators 或 Incremental Generators 之前筆記 使用 Source Generators 來為 method 加上時間測量 與 使用 Incremental Generators 來為 method 加上時間測量 紀錄到如何使用 Source Generators 與 Incremental Generators 來為 method 加上 stopwatch 測量 method 的執行時間,但</div><div class=read-more><a href=https://blog.yowko.com/debug-source-generators-incremental-generators/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/incremental-generators-stopwatch/>使用 Incremental Generators 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-12-05</span>
<span class=more-meta>約 2206 字</span>
<span class=more-meta>預計閱讀 5 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Incremental Generators 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄了使用在 .NET 7 所發表 Stopwatch 的新 api 來測量程式執行時間以避免 memory allocate,接著就想起 Metho</div><div class=read-more><a href=https://blog.yowko.com/incremental-generators-stopwatch/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/source-generators-stopwatch/>使用 Source Generators 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-12-03</span>
<span class=more-meta>約 2576 字</span>
<span class=more-meta>預計閱讀 6 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 Source Generators 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄了使用在 .NET 7 所發表 Stopwatch 的新 api 來測量程式執行時間以避免 memory allocate,接著就想起 Metho</div><div class=read-more><a href=https://blog.yowko.com/source-generators-stopwatch/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/measure-method-performance-with-methodtimer-fody/>使用 MethodTimer.Fody 來為 method 加上時間測量</a></h1><div class=post-meta><span class=post-time>2024-11-27</span>
<span class=more-meta>約 583 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>使用 MethodTimer.Fody 來為 method 加上時間測量 之前筆記 Stopwatch 的正確用法 紀錄到如何使用 Stopwatch 的新 API,讓我想起過去常使用的 GitHub:MethodTimer.Fody 也是透過 Stopwatch.StartNew() 方式來計算時間,回頭確認是否有更新時</div><div class=read-more><a href=https://blog.yowko.com/measure-method-performance-with-methodtimer-fody/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/stopwatch-best-practice/>Stopwatch 的正確用法</a></h1><div class=post-meta><span class=post-time>2024-11-22</span>
<span class=more-meta>約 607 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>Stopwatch 的正確用法 前幾天從 Cash 大的粉專上看到 Cash Wu Geek 分享了 youtuber-Nick Chapsas 對於 Stopwatch 的正確用法:Youtube:How to Measure Time Correctly in .NET,覺得值得仔細了解一下,快速筆</div><div class=read-more><a href=https://blog.yowko.com/stopwatch-best-practice/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/dotnet9-csharp13-lock/>隨 .NET9 SDK 推出的 C#13 新增 Lock 類別與用法</a></h1><div class=post-meta><span class=post-time>2024-11-07</span>
<span class=more-meta>約 692 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>隨 .NET9 SDK 推出的 C#13 新增 Lock 類別與用法 在 C# 中,lock 語法確保程式碼區塊的執行不會被其他 thread 影響。過去 lock 語法就是 System.Threading.Monitor 的語法糖,編譯器產生的程式碼等於使用</div><div class=read-more><a href=https://blog.yowko.com/dotnet9-csharp13-lock/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/download-youtube-private-video/>下載 youtube 私人影片</a></h1><div class=post-meta><span class=post-time>2024-10-21</span>
<span class=more-meta>約 523 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>下載 youtube 私人影片 陸陸續續上傳了一些家庭影片在 youtube,並設定成私人影片,原本的想法是透過 youtube 來備份影片,或是需要播放時可以隨時隨地開啟,不</div><div class=read-more><a href=https://blog.yowko.com/download-youtube-private-video/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nexus-docker-multi-arch-pull-push/>將 Docker Multi-arch image 搬移至另個 registry 以 Nexus Repository 為例</a></h1><div class=post-meta><span class=post-time>2024-10-18</span>
<span class=more-meta>約 567 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>將 Docker Multi-arch image 搬移至另個 registry 以 Nexus Repository 為例 這個需求也是因為團隊 Nexus Repository server 的用量太高,造成服務中斷,進而影響到 CI/CD 流程,團隊的開發進度也多少受到影響,所以決定啟</div><div class=read-more><a href=https://blog.yowko.com/nexus-docker-multi-arch-pull-push/ class=read-more-link>繼續閱讀</a></div></div></article><article class=post><header class=post-header><h1 class=post-title><a class=post-link href=https://blog.yowko.com/nexus-docker-pull-push/>將 Docker image 搬移至另個 registry 以 Nexus Repository 為例</a></h1><div class=post-meta><span class=post-time>2024-10-16</span>
<span class=more-meta>約 550 字</span>
<span class=more-meta>預計閱讀 2 分鐘</span></div></header><div class=post-content><div class=post-summary>將 Docker image 搬移至另個 registry 以 Nexus Repository 為例 這個需求也是因為團隊 Nexus Repository server 的用量太高,造成服務中斷,進而影響到 CI/CD 流程,團隊的開發進度也多少受到影響,所以決定啟用</div><div class=read-more><a href=https://blog.yowko.com/nexus-docker-pull-push/ class=read-more-link>繼續閱讀</a></div></div></article></section><nav class=pagination><a class=next href=https://blog.yowko.com/page/2/><span class=next-text>下一頁</span>
<i class="iconfont icon-right"></i></a></nav></div></div></main><footer id=footer class=footer><div class=social-links><a href="/cdn-cgi/l/email-protection#9be2f4ecf0f4dbe2f4ecf0f4b5f8f4f6" class="iconfont icon-email" title=email></a><a href=https://www.linkedin.com/in/yowko/ class="iconfont icon-linkedin" title=linkedin></a><a href=https://github.com/yowko class="iconfont icon-github" title=github></a><a href=https://blog.yowko.com/index.xml type=application/rss+xml class="iconfont icon-rss" title=rss></a></div><div class=copyright><span class=power-by>由 <a class=hexo-link href=https://gohugo.io>Hugo</a> 強力驅動</span>
<span class=division>|</span>
<span class=theme-info>主題 -
<a class=theme-link href=https://github.com/huanlin/hugo-theme-even-more>Even More</a></span>
<span class=copyright-year>©
2016 -
2025
<span class=heart><i class="iconfont icon-heart"></i></span><span class=author>Yowko Tsai</span></span></div></footer><div class=back-to-top id=back-to-top><i class="iconfont icon-up"></i></div></div><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="https://blog.yowko.com/lib/highlight/highlight.pack.js?v=20171001"></script><script type=text/javascript src=https://blog.yowko.com/lib/jquery/jquery-3.2.1.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/slideout/slideout-1.0.1.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/fancybox/jquery.fancybox-3.1.20.min.js></script><script type=text/javascript src=https://blog.yowko.com/lib/instantclick/instantclick-3.0.1.min.js data-no-instant></script><script type=text/javascript src="https://blog.yowko.com/dist/even.min.js?v=3.2.0"></script><script type=application/javascript>var doNotTrack=false;if(!doNotTrack){window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;ga('create','G-7PF6W2W48Y','auto');ga('send','pageview');}</script><script async src=https://www.google-analytics.com/analytics.js></script></body></html>