C#實現ActiveMQ消息隊列

  本文使用C#實現ActiveMQ消息隊列功能。

一、首先需要導入兩個包,分別是:Apache.NMS 和 Apache.NMS.ActiveMQ

二、創建Winform程序實現生產者功能。

三、Producer後臺代碼如下:

using Apache.NMS;
using Apache.NMS.ActiveMQ;
using System;
using System.Runtime.Serialization;
using System.Windows.Forms;

namespace ActiveMQProducer
{
    public partial class Producer : Form
    {
        // 生產者
        public Producer()
        {
            InitializeComponent();
            InitProducer();
        }
        private IConnectionFactory factory;

        public void InitProducer()
        {
            try
            {
                //初始化工廠,這裏默認的URL是不需要修改的
                factory = new ConnectionFactory("tcp://localhost:61616");
            }
            catch
            {
                lbMessage.Text = "初始化失敗!!";
            }
        }

        private void btnConfirm_Click(object sender, EventArgs e)
        {
            //通過工廠建立連接
            using (IConnection connection = factory.CreateConnection())
            {
                //通過連接創建Session會話
                using (ISession session = connection.CreateSession())
                {
                    //通過會話創建生產者,方法裏面new出來的是MQ中的Queue
                    IMessageProducer prod = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQQueue("ActiveMQTest"));

                    #region 發送結構信息

                    //Student studentModel = new Student();
                    //studentModel.Grade = "三年級"; 
                    //studentModel.Name = "張三";
                    //studentModel.Sex = "男";
                    //studentModel.Age = "23";

                    //string temp = JsonConvert.SerializeObject(studentModel); 
                    //ITextMessage message = prod.CreateTextMessage(temp);  

                    #endregion

                    #region 發送文本信息

                    //創建一個發送的消息對象
                    ITextMessage message = prod.CreateTextMessage();
                    //給這個對象賦實際的消息
                    message.Text = txtMessage.Text;

                    #endregion 

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

    [DataContract]
    public class Student
    {
        [DataMember]
        public string Grade { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public string Sex { get; set; }

        [DataMember]
        public string Age { get; set; } 
    }
}

四、接下來創建Winform程序實現消費者功能。

五、Customer後臺代碼如下:

using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Commands;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ActiveMQCustomer
{
    public partial class Customer : Form
    {
        // 消費者
        public Customer()
        {
            InitializeComponent();
            InitConsumer();
        }

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

        void consumer_Listener(IMessage message)
        {
            #region 接收結構類型

            //try
            //{
            //    ActiveMQTextMessage receiveMsg = message as ActiveMQTextMessage;

            //    Student studentModel = JsonConvert.DeserializeObject<Student>(receiveMsg.Text);

            //    tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), receiveMsg);
            //}
            //catch (Exception ex)
            //{

            //}

            #endregion

            #region 接收文本類型

            ITextMessage msg = (ITextMessage)message;
            tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), msg);

            #endregion
        }

        public delegate void DelegateRevMessage(ITextMessage message);

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

    [DataContract]
    public class Student
    {
        [DataMember]
        public string Grade { get; set; }

        [DataMember]
        public string Name { get; set; }

        [DataMember]
        public string Sex { get; set; }

        [DataMember]
        public string Age { get; set; }
    }
}

六、根據服務器上操作系統的版本,選擇進入到win32還是win64,開啓ActiveMQ服務。

七、然後啓動我們程序,進行測試。

 

最後附上源碼

  鏈接: https://pan.baidu.com/s/1JFylBEpf_Doo5ahjdG3-Rw

  提取碼: q3ti

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章