• 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次。

    那么看下视图变化:

    好吧,就到这里。

    后续深入一下,比如说事务、持久化等等等。

  • 相关阅读:
    hdu 2132 An easy problem
    ACM暑假培训宣讲稿
    hdu Lovekey(水题)
    windows 下c++编译
    semantic
    could not open XXX permission denied
    sv_target_output dx11
    hlsl 的tex函数
    effect state dx11
    cg 到hlsl的转换
  • 原文地址:https://www.cnblogs.com/aoximin/p/13254833.html
Copyright © 2020-2023  润新知