ActiveMQ c# 系列——例項(二)
阿新 • • 發佈:2020-07-26
前言
前面一章中介紹了activemq,並且呢安裝了。
這一章就來看一下例項吧。
正文
我使用佇列舉例。
是這樣子,佇列是一對一的關係,比如說我生產了一條訊息,那麼只要有一個消費者消費完畢那麼就算消費完了。
這裡貼一個思路圖:
簡單介紹一下什麼意思:
1.通過connectFactory 建立連線,然後形成tcp會話。
2.將他們例項化消費者和生產者,這個其實就是庫幫我們把生產和消費的api分開,不同的例項呼叫不同種類的api。
3.這樣就可以將訊息傳送到目的地或者從目的地取訊息。
生產者:
static void Main(string[] args) { Uri connecturl = new Uri("activemq:tcp://106.15.250.57:61616"); IConnectionFactory factory = new ConnectionFactory(connecturl); using (IConnection connection = factory.CreateConnection()) { using (ISession session = connection.CreateSession()) { IDestination destination = SessionUtil.GetDestination(session, "queue://test"); using (IMessageProducer producer = session.CreateProducer(destination)) { producer.DeliveryMode = MsgDeliveryMode.Persistent; producer.RequestTimeout = TimeSpan.FromSeconds(2); ITextMessage request = session.CreateTextMessage("oh,my frient"); producer.Send(request); } } } }
執行後:
看一下上圖中這幾個引數的意義:
1.name 名字 我上面定義了test
2.number of pending message 未處理的訊息
3.number of consumers 消費者數量
4.Messages Enqueued 訊息佇列中的數量
5.Messages Dequeued 出列的數量
好的,那麼我們來消費一下,看下有什麼變化。
設定消費者:
class Program { static void Main(string[] args) { Uri connecturl = new Uri("activemq:tcp://106.15.250.57:61616"); IConnectionFactory factory = new ConnectionFactory(connecturl); using (IConnection connection = factory.CreateConnection()) { using (ISession session = connection.CreateSession()) { IDestination destination = SessionUtil.GetDestination(session, "queue://test"); using (IMessageConsumer consumer=session.CreateConsumer(destination)) { connection.Start(); consumer.Listener += new MessageListener(onMessage); Console.ReadKey(); } } } } protected static void onMessage(IMessage receivedMsg) { ITextMessage message = receivedMsg as ITextMessage; if (message != null) { //查詢出訊息 Console.WriteLine(message.Text); } } }
上面顯示了3個哈,因為我生產了3次。
那麼看下檢視變化:
好吧,就到這裡。
後續深入一下,比如說事務、持久化等等等。