ActiveMQ系列(1) - 使用入門

来源:http://www.cnblogs.com/Tmc-Blog/archive/2016/02/24/5212589.html
-Advertisement-
Play Games

沒網的日子真的不好過啊 1.背景: 對於常見業務中,數據併發是一個很頭疼的問題,很多時候,會出現資源共用導致線程阻塞的問題,這時候問題就來了,,,老闆也尾隨來了,來找你麻煩了,錢哪去了?,具體點兒, 比如生成訂單時候,多用戶同時下單並支付,這都是白花花的銀子啊,算錯了,真的出現上面的情況了,還一個就


沒網的日子真的不好過啊
  • 1.背景:
                  對於常見業務中,數據併發是一個很頭疼的問題,很多時候,會出現資源共用導致線程阻塞的問題,這時候問題就來了,,,老闆也尾隨來了,來找你麻煩了,錢哪去了?,具體點兒,             比如生成訂單時候,多用戶同時下單並支付,這都是白花花的銀子啊,算錯了,真的出現上面的情況了,還一個就是會遇到數據臟讀問題,那麼怎麼解決?不以規矩不成方圓,所以,從小到大,             老師總讓我們排隊,井然有序的入課堂就坐,就因為有序所以也提升了效率。ActiveMQ就做到了,列隊形式,類似線程池列隊,redis的push prop,當然redis更猛。  
  • 2.系統環境:

           windows 10 企業版本 64位


  • 3.獲取 與 安裝 :

              a)     http://activemq.apache.org/ 自行選擇中意版本(或 文章底部,我上傳了,是目前的最新版本), 註意看功能變數名稱,apache,所以肯定離不開 jdk了, jdk獲取:

                      http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ,同時配置 JAVA_HOME環境               b)    安裝 ActiveMQ:                         首先,解壓下載的zip文件包,文件目錄如下:                                                            bin       不用說了,和tomcat一樣的,都是bat的啟動或者停止的批處理和幾個相關的jar包,                         conf     顧名思義就是存放配置文件的                         data     數據,什麼數據?執行過程中生成的log等文件都在裡面                         docs    就是現在要用到的,安裝以及使用:       
  • 4 安裝使用:
         doc文件夾中的 提示:                                                               執行之後,下麵的配置可以不用看了,因為部分不正確,直接在瀏覽器地址欄鍵入:Http://127.0.0.1:(埠號)8161,這時候可以看到以下界面:                                                                   進行相關配置,預設用戶名稱和密碼,上一步驟有提示,account/password ->admin/admin,顯示如下界面:                                                                                                -----其實測試過程中發現,上面的東西如果沒有特殊要求,可以不用變化,就可以直接使用,這地方註意,看以下截圖:                                        執行 bin文件夾中的activemq.bat之後,發現執行到這個地方就不執行了,起初以為出現異常了,其實不是這個問題,可以不用理會,直接寫代碼即可。  
  • 5. 參考  p2p 案例代碼:                        
         依次引入:Apache.NMS.dll,Apache.NMS.ActiveMQ.dll即可食用。     (案例來自,底部鏈接,雖然是別人的東西,但是自己動手寫一遍和只看別人的東西,是不可用言語能表達的。):控制台程式: 服務端     
namespace TestActiveMQ
    {
        class Program
        {
            private static IConnectionFactory factory //需要引用 Apache.NMS;
                = new ConnectionFactory("tcp://localhost:61616");//需要引用Apache.NMS.ActiveMQ;

            static void Main(string[] args)
            {
                //建立連接
                using (IConnection connection = factory.CreateConnection())
                {
                    //通過連接創建session會話
                    using (ISession session = connection.CreateSession())
                    {
                        //通過會話創建生產者,方法裡面new出來的是MQ中的Queue
                        IMessageProducer producer = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"));
                        //創建一個發送的消息對象
                        ITextMessage message = producer.CreateTextMessage();

                        //給這個對象賦實際的消息
                        message.Text = "12321321321";
                        //設置消息對象的屬性,這個很重要哦,是Queue的過濾條件,也是P2P消息的唯一指定屬性
                        message.Properties.SetString("filter", "demo");
                        //生產者把消息發送出去,幾個枚舉參數MsgDeliveryMode是否長鏈,MsgPriority消息優先順序別,發送最小單位,當然還有其他重載
                        producer.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);

                        Console.WriteLine("發送成功!");
                        Console.ReadLine();
                    }
                }

            }
        }
    }

客戶端:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitConsumer();
        }


        public void InitConsumer()
        {
            //創建連接工廠
            IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616");
            //通過工廠構建連接
            IConnection connection = factory.CreateConnection();
            //這個是連接的客戶端名稱標識
            connection.ClientId = "firstQueueListener";
            //啟動連接,監聽的話要主動啟動連接
            connection.Start();
            //通過連接創建一個會話
            ISession session = connection.CreateSession();
            //通過會話創建一個消費者,這裡就是Queue這種會話類型的監聽參數設置
            IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("firstQueue"), "filter='demo'");
            //註冊監聽事件
            consumer.Listener += new MessageListener(consumer_Listener);
            //connection.Stop();
            //connection.Close();  

        }

        void consumer_Listener(IMessage message)
        {
            ITextMessage msg = (ITextMessage)message;
            //非同步調用下,否則無法回歸主線程
            tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), msg);

        }

        public delegate void DelegateRevMessage(ITextMessage message);

        public void RevMessage(ITextMessage message)
        {
            tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
        }

    }

執行結果:

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

-Advertisement-
Play Games
更多相關文章
  • 首先,吐槽一下金數據的API文檔 http://help.jinshuju.net/articles/api-intro.html 寫的很粗糙啊...反正我是沒太看明白 拿表單api舉例,只告訴你了個地址https://jinshuju.net/api/v1/forms/ex27t2,然後呢,然後沒
  • 方法: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 namespace PaiXie.Pos.Admin
  • 主要是想把日期和其它因素考慮進來。 使用RNGCryptoServiceProvider類創建唯一的最多8位數字元串。 private static string GetUniqueKey() { int maxSize = 8; int minSize = 5; char[] chars = ne
  • 泛型通常用在集合和集合上運行的方法中; 泛型NET Framework2.0提供一個新的命名空間System。Collections。Generic。 早期集合缺點: System.Collections.ArrayList list = new System.Collections.ArrayLi
  • 最近項目中需要在WPF中加入WebBrowser控制項,發現與AllowsTransparency="True" WindowStyle="None"有衝突,在網上搜索了一下,找到的解決方案跟我的項目有衝突,只好自己解決。 產生原因:引自http://www.cnblogs.com/SkyD/arch
  • http://www.w3school.com.cn/xml/xml_elements.asp <?xml version="1.0" encoding="gb2312"?><string xmlns="http://tempuri.org/">200,2014/5/6 0:06:05</strin
  • http://www.cnblogs.com/finesite/archive/2011/01/28/1946940.html 給C:\Windows\temp 文件夾賦予完全控制許可權,如圖:
  • 1.ArrayList ArrayList list = new ArrayList(); //for遍歷 for (int i = 0; i < list.Count; i++) { SE se=(SE)list[i]; Console.WriteLine(se.Name); } //foreac
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...