C# RabbitMQ模擬Producer與Consumer

最近系統考量可靠性問題,在中間加上一層 Message Queue(MQ)的架構,採用的是目前最多人使用的RabbitMQ當作server服務。順便直接以百萬筆資料為單位塞入MQ來測試一下效能。

Producer程式

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();//引用stopwatch物件
            sw.Reset();//碼表歸零
            sw.Start();//碼表開始計時
            //
            string queue = "info";
            try
            {
                var factory = new RabbitMQ.Client.ConnectionFactory();
                factory.HostName = "localhost";
                factory.UserName = "guest";
                factory.Password = "guest";

                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        bool durable = true;
                        channel.QueueDeclare(queue, durable, false, false, null);
                        RabbitMQ.Client.IBasicProperties properties = channel.CreateBasicProperties();
                        properties.DeliveryMode = 2;
                        for (int i = 1; i <= 100; i++)
                        {
                            LogInfo info = new LogInfo();
                            info.SYS_ID = "系統";
                            info.COMPANY_ID = "公司";
                            info.STORE_ID = "店別";
                            info.Content = "訊息";
                            string m1 = Newtonsoft.Json.JsonConvert.SerializeObject(info);
                            var body = Encoding.UTF8.GetBytes(m1);
                            channel.BasicPublish("", queue, properties, body);
                        }

                    }
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            sw.Stop();
            string result1 = sw.Elapsed.TotalMilliseconds.ToString();
            Console.WriteLine("共花費:" + result1 + "毫秒");
            Console.ReadLine();

Consumer端程式

    string queue = "info";
            try
            {
                var factory = new ConnectionFactory();
                factory.HostName = "localhost";
                factory.UserName = "guest";
                factory.Password = "guest";
                var connection = factory.CreateConnection();
                var channel = connection.CreateModel();
                channel.QueueDeclare(queue, true, false, false, null); // 定義處理那一個queue
                channel.BasicQos(0, 1, false);  // 每次處理1則

                var consumer = new RabbitMQ.Client.Events.EventingBasicConsumer(channel); 
                // 定義收到queue的內容處理方式
                consumer.Received += (sender, e) =>
                {
                    byte[] body = e.Body.ToArray();
                    string message1 = Encoding.UTF8.GetString(body); 
                    LogInfo log = JsonConvert.DeserializeObject<LogInfo>(message1);  // 將queue中的json轉回物件
                    // 以下可以更改為自己要處理的事項
                    Console.WriteLine(log.DateTime.ToString("yyyy/MM/dd HH:mm:ss:FFF")+" "+log.Content );  // 先顯示畫面上
                    //
                    channel.BasicAck(e.DeliveryTag, false); // 處理完手動回應    

                };
                channel.BasicConsume(queue, false, consumer);  // 開始處理
                Console.ReadLine();
                connection.Close();
                channel.Close();
            }
            catch (System.Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

自然人憑證作為公文系統、簽核系統簽章用憑證

最近要用.net c#去開發憑證簽證、加解密的功能,於是下午跑去申請了自然人憑證。然後瞭解一下卡片中的資料~繼續努力中,似乎自然人憑證與未來的新式晶片身份證都會當做很重要的憑證以及加解密的依據。

內政部憑證 網址: https://moica.nat.gov.tw/index.html

電子簽章法 https://law.moj.gov.tw/LawClass/LawAll.aspx?pcode=J0080037

跨平台網頁元件下載 網址: https://moica.nat.gov.tw/rac_plugin.html

HiPKI Local Server範例 網址: https://gpkiapi.nat.gov.tw/PKCS7Verify/

http://localhost:61161

HiPKI Local Server (version:1.3.4.103339) at 127.0.0.1:61161

http://127.0.0.1:61161/pkcs11info


http://127.0.0.1:61161/sign

http://127.0.0.1:61161/decrypt

ODP.net 支援 .net 6與Entity Framework Core 6

Oracle開發團隊釋出新的ODP.NET 支援Oracle Database 11g Release 2 (11.2.0.4) 以上的版本,包括免費的21c xe、21c ee跟 Autonomous DB.

ODP.NET Core for .NET 6  以及 ODP.NET EF Core for EF Core 6 都免費透過 NugetNU取得。

來源

Announcing Oracle Support for .NET 6 and Entity Framework Core 6

.Net 6 安裝正式版FastReport元件透過Nuget方式安裝教學

先瞭解什麼是Nuget

Nuget(https://www.nuget.org/)是微軟Open出來的一個套件管理機制,NuGet 套件就是副檔名為 .nupkg 的單一 ZIP 檔案,內含已編譯程式碼 (DLL)、其他與該程式碼相關的檔案,以及包含套件版本號碼這類資訊的描述性資訊清單。

安裝FastReport完成後在資料夾看到有一個Nugets的資料夾

工具→Nuget套件管理員→套件管理員設定

套件來源新增一個Name: FastReport 位置指向剛才的資料夾

下拉套件來源,選擇剛才新增的FastReport,就可以選到我們購買的元件了

Delphi 11 安裝後出現Socket Error 10038的解決

最近安裝完Delphi 11後,一開啟IDE就跳出一個 Socket Error #10038. Socket operation on non-socket的錯誤,接著就無法開啟IDE惹。

感謝捷康的eddie幫忙,處理掉問題,處理的方式是到 regedit 登錄檔編輯器中。依序進入 HKEY_CURRENT_USER \ SOFTWARE \ Embarcadero \ BDS \ 22.0 \ Known IDE Packages ,然後在列表裡找到一個 $ (BDS) \ Bin \ LivePreview280.bpl 接著點二下進入編輯,在名字前面加上二個底線”__” 變成 “__Embarcadero FireUI Live Preview Package”就可以了!終於可以順利操作Delphi 11了 🙂

相關連結:

Delphi 10.4.1 Socket Error on IDE Start

https://en.delphipraxis.net/topic/4535-delphi-1041-socket-error-on-ide-start/

Visual Studio 2022 預覽版安裝

因為Visual Studio2022 預覽版本是跟著.net 6綁一起,於是下載預覽版試用。

下載後開啟在標題列可以看到是 Visual Studio Enterprise 2002 Preview ,版本號是17.0.0 Preview 4.1。在第一個分頁工作負載中,依照自己開發需求去勾選你要開發的項目以及平台有那些,這邊我勾的是ASP.NET/Azure/Node.js/.net desktop/database等等。

第二個頁籤個別元件的話,在.net的部份預設是勾選.net 6,如果你的舊專案有舊的版本要維護,記得要把相對應的套件勾選起來

接著在程式碼工具中,可以勾選像Code Map/程式碼複製品Code Clone跟類別設計工具Class Design。

語言套件就不說了XDD 可以增加英文語系讓自己看起來厲害點(誤

安裝位置的話,預設是C槽,如果要安裝到別的地方的話就可以調整下。右下角顯示大小是11.36G,沒問題就按下安裝去泡杯咖啡吧(喂!要上班呀

我就看著它裝B XDDD

經過了77四十九天後,安裝完畢了

安裝完成後可以看到自動開啟Visual Studio 2022,它還自動帶回我Visual Studio 2019的一些設定(馬賽克)

在架構的下拉可以看到.net 6.0的預覽版本可以玩囉!

AWS/Azure 雲端系統中文顯示亂碼解決

不管在AWS開EC2,還是Azure開虛擬機器,上面預設安裝的系統都會是英文版的。

要顯示中文的話除了在語言上面要新增中文繁體,台灣外

也要記得在設定中的地區系統管理,有一個非Unicode程式的語言,要變更為中文 繁體.台灣,不然會出現亂碼的冏境。

.net 6 preview加上對http/3支援

http3協定是架構在以往被認為最不穩定的UDP基礎上,而為了消除UDP的不確定性,加上了QUIC協定。

透過QUIC來替代TCP對於可靠以及流量的控制,使得http3可以有效可靠的進行傳輸。

在.net 6的preview版本中,微軟也加上了對http/3的支援,也許它會是http協定的一估新的未來