本文使用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