C# 消息隊列demo

来源:https://www.cnblogs.com/flydmxy/archive/2022/05/08/16246010.html
-Advertisement-
Play Games

1.安裝完成rabbitMQ 參考上一篇如何安裝 rabbitMQ 2.安裝 OTP服務 https://www.erlang.org/downloads C#代碼 需要導入RabbitMQ.Client 在NuGet中搜索自取 隊列發送端 var factory = new ConnectionF ...


1.安裝完成rabbitMQ

參考上一篇如何安裝 rabbitMQ

2.安裝 OTP服務

https://www.erlang.org/downloads 

 

C#代碼

需要導入RabbitMQ.Client

在NuGet中搜索自取

隊列發送端

var factory = new ConnectionFactory();
//RabbitMQ伺服器地址
factory.HostName = "192.168.0.22";
//埠號
//factory.Port = 15672;
factory.UserName = "admin";
factory.Password = "123456";
//消息非同步轉發
factory.DispatchConsumersAsync = true;
//交換機名稱
string exchangeName = "exchange2";
//routingKey的值
string eventName = "key1";
//連接伺服器
using var conn = factory.CreateConnection();
int MsgInt = 1;

while (true)
{
    //待發送的消息
    string msg = $"{MsgInt++}條消息{DateTime.Now.ToLongTimeString()}";
    //創建通道
    using (var channel = conn.CreateModel())
    {
        //消息屬性
        var properties = channel.CreateBasicProperties();
        //傳輸模式,1:非持久化,2:持久化
        properties.DeliveryMode = 2;
        //聲明交換機
        channel.ExchangeDeclare(exchange: exchangeName, type: "direct");
        byte[] body = Encoding.UTF8.GetBytes(msg);
        //生產消息
        channel.BasicPublish(exchange: exchangeName, routingKey: eventName, mandatory: true, basicProperties: properties, body: body);
    }
    Console.WriteLine("發送消息:" + msg);
    Thread.Sleep(1000);
}

收信方

var factory = new ConnectionFactory();
//RabbitMQ伺服器地址
factory.HostName = "localhost";
//埠號
//factory.Port = 15672;
factory.UserName = "admin";
factory.Password = "123456";

//消息非同步轉發
factory.DispatchConsumersAsync = true;
//交換機名稱
string exchangeName = "exchange2";
//routingKey的值
string eventName = "key1";
using var conn = factory.CreateConnection();
//創建通道
using var channel = conn.CreateModel();

//聲明交換機
channel.ExchangeDeclare(exchange: exchangeName, type: "direct");
//聲明隊列
string queueName = "queue1";
channel.QueueDeclare(queueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
//將隊列綁定到交換機中
channel.QueueBind(queueName, exchangeName, eventName);
//消費者拉取消息
AsyncEventingBasicConsumer consumer = new AsyncEventingBasicConsumer(channel);
consumer.Received += Consumer_Received;
//消費消息
channel.BasicConsume(queueName, autoAck: false, consumer);
Console.WriteLine("按回車退出");
Console.ReadLine();

async Task Consumer_Received(object sender, BasicDeliverEventArgs args)
{
    try
    {
        byte[] bytes = args.Body.ToArray();
        string msg = Encoding.UTF8.GetString(bytes);
        Console.WriteLine(DateTime.Now.ToLongTimeString() + "收到了信息" + msg);
        //消息確認處理,DeliveryTag:消息的編號 執行後等於告訴隊列 已經收到了消息
        channel.BasicAck(args.DeliveryTag, multiple: false);
        await Task.Delay(800);
    }
    catch (Exception ex)
    {
        //對沒有確認處理的消息進行消息重發
        channel.BasicReject(args.DeliveryTag, true);
        Console.WriteLine(DateTime.Now.ToLongTimeString() + "處理收到的消息出錯:" + ex);
    }
}

收信方和發送方 分別是 2個項目 做 測試

ConsoleApp1是發送 2是收信

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 模塊與包 一、Python 模塊簡介 在開發過程中,隨著程式代碼越寫越多,在一個文件里代碼就會越來越長,越來越不容易維護。 後面我們學習了函數,知道函數是實現一項或多項功能的一段程式,這樣就更方便我們重覆使用代碼。 緊接著,我們有學了類,類可以封裝方法和變數(屬性)。這樣就更方便我們維護代碼了。 我 ...
  • 爬取圖片實例 •selenium+win32爬取圖片 Python學習交流Q群:903971231##### """爬取圖片""" import os import threading import time from ctypes import windll import requests imp ...
  • C++進階-3-5-set/multiset容器 1 #include<iostream> 2 #include<set> 3 using namespace std; 4 5 // set/multiset容器 6 7 void printSet(set<int>& s) { 8 9 for (s ...
  • 還記得Java 16中的instanceof增強 嗎? 通過下麵這個例子再回憶一下: Map<String, Object> data = new HashMap<>(); data.put("key1", "aaa"); data.put("key2", 111); if (data.get("k ...
  • Matplotlib 教程 Matplotlib 是 Python 的繪圖庫,它能讓使用者很輕鬆地將數據圖形化,並且提供多樣化的輸出格式。 Matplotlib 可以用來繪製各種靜態,動態,互動式的圖表。 Matplotlib 是一個非常強大的 Python 畫圖工具,我們可以使用該工具將很多數據通 ...
  • 一、背景介紹 最近幾天,谷愛凌在冬奧會賽場上奪得一枚寶貴的金牌,為中國隊貢獻了自己的榮譽! 針對此熱門事件,我用Python的爬蟲和情感分析技術,針對小破站的彈幕數據,分析了眾網友彈幕的輿論導向,下麵我們來看一下,是如何實現的分析過程。 二、代碼講解-爬蟲部分 2.1 分析彈幕介面 首先分析B站彈幕 ...
  • 來源:https://www.toutiao.com/article/6927297421139706376 單例模式(Singleton)是程式設計中一種非常重要的設計模式,設計模式也是Java面試重點考察的一個方面。面試經常會問到的一個問題是:SpringMVC中的Controller是單例還是 ...
  • 1、WebFirst框架描述 WebFirst 是果糖大數據團隊開發的新一代 高性能 代碼生成器&資料庫設計工具,由.net core + sqlsugar 開發 導入1000個表只要1-2秒,用法簡單,功能強大,支持多種資料庫 ,具體功能如下: 一、 建庫、CodeFirst方式線上建表,沒用到C ...
一周排行
    -Advertisement-
    Play Games
  • 分組和樹形結構是不一樣的。 樹形結構是以遞歸形式存在。分組是以鍵值對存在的形式,類似於GroupBy這樣的形式。 舉個例子 ID NAME SEX Class 1 張三 男 1 2 李四 女 2 3 王二 男 1 當以Sex為分組依據時則是 Key Value 男 1 張三 男 1 3 王二 男 1 ...
  • NetCore中將SQLServer資料庫備份為Sql腳本 描述: 最近寫項目收到了一個需求, 就是將SQL Server資料庫備份為Sql腳本, 如果是My Sql之類的還好說, 但是在網上搜了一大堆, 全是教你怎麼操作SSMS的, 就很d疼! 解決方案: 通過各種查找資料, 還有一些老哥的幫助, ...
  • 我的Notion Clowd.Squirrel Squirrel.Windows 是一組工具和適用於.Net的庫,用於管理 Desktop Windows 應用程式的安裝和更新。 Squirrel.Windows 對 Windows 應用程式的實現語言沒有任何要求,甚至無需服務端即可完成增量更新。 ...
  • 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblog ...
  • 1. Netty源碼研究筆記(3)——Channel系列 依舊是通過先縱向再橫向的研究方法,在開篇中,我們發現不管是Sever還是Client,最終的啟動是通過調用channel的對應方法來完成的,而這個動作實際在channel綁定的eventLoop中執行。 接下來,我們繼續EchoSever、E ...
  • 大家好,今天給大家介紹一款輕量、快速、穩定可編排的組件式規則引擎框架LiteFlow。 一、LiteFlow的介紹 LiteFlow官方網站和代碼倉庫地址 官方網站:https://yomahub.com/liteflow Gitee托管倉庫:https://gitee.com/dromara/li ...
  • 我使用Spring AOP實現了用戶操作日誌功能 今天答辯完了,復盤了一下系統,發現還是有一些東西值得拿出來和大家分享一下。 需求分析 系統需要對用戶的操作進行記錄,方便未來溯源 首先想到的就是在每個方法中,去實現記錄的邏輯,但是這樣做肯定是不現實的,首先工作量大,其次違背了軟體工程設計原則(開閉原 ...
  • 《零基礎學Java》 繪製幾何圖形 Java可以分別使用 Graphics 和 Graphics2D 繪製圖形,Graphics類 使用不同的方法繪製不同的圖形(drawLine()方法可f以繪製線、drawRect()方法用於繪製矩形、drawOval()方法用於繪製橢圓形)。 Graphics類 ...
  • 本期教程人臉識別第三方平臺為虹軟科技,本文章講解的是人臉識別RGB活體追蹤技術,免費的功能很多可以自行搭配,希望在你看完本章課程有所收穫。 ...
  • 很多人都喜歡使用黑色的主題樣式,包括我自己,使用了差不多三年的黑色主題,但是個人覺得在進行視窗轉換的時候很廢眼睛。 比如IDEA是全黑的,然後需要看PDF或者WORD又變成白色的了,這樣來回切換導致眼睛很累,畢竟現在網頁以及大部分軟體的界面都是白色的。那麼還是老老實實的使用原來比較順眼的模式吧。 1 ...