1. 程式人生 > 實用技巧 >ActiveMQ c# 系列——例項(二)

ActiveMQ c# 系列——例項(二)

前言

前面一章中介紹了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次。

那麼看下檢視變化:

好吧,就到這裡。

後續深入一下,比如說事務、持久化等等等。