Esempio n. 1
0
        private void SendMessage()
        {
            //创建临时目的地,它们的存在时间只限于创建它们的连接所保持的时间
            //只有创建该临时目的地的连接上的消息消费者才能够从临时目的地中提取消息
            //ITemporaryQueue queue = m_session.CreateTemporaryQueue();

            IQueue queue = m_session.GetQueue("test_Queue");

            m_producer = m_session.CreateProducer(queue);



            //TextMessage消息类型,  普通文本消息
            ITextMessage textMessage = m_producer.CreateTextMessage();

            textMessage.Text = this.txtBox_消息.Text;

            //MapMessafe消息类型,   Map集合消息
            IMapMessage mapMessage = m_producer.CreateMapMessage();

            m_producer.Send(mapMessage);

            //ObjectMessage消息类型, 发送序列化对象
            Queue <string> obj = new Queue <string>();

            obj.Enqueue("one");
            obj.Enqueue("two");
            IObjectMessage objectMessage = m_producer.CreateObjectMessage(obj);

            m_producer.Send(objectMessage);

            //BytesMessage消息类型, 发送字节消息
            IBytesMessage bytesMessage = m_producer.CreateBytesMessage();

            bytesMessage.WriteBytes(System.Text.Encoding.Default.GetBytes("字节"));
            m_producer.Send(bytesMessage);

            //其它消息类型大同小异

            //设置是否持久化
            //m_producer.DeliveryMode= MsgDeliveryMode.Persistent;

            //设置优先级 默认 MsgPriority.BelowNormal 4级
            //m_producer.Priority = MsgPriority.BelowNormal;

            //设置过期时间,5秒后 只有Queue点对点有效
            //m_producer.TimeToLive=new TimeSpan(1000*5);

            //发送超时时间,默认等于0,如果设置超时,则所有的消息都是用同步发送
            //m_producer.RequestTimeout = new TimeSpan(1000*20);
        }
Esempio n. 2
0
        void Send(IMessageProducer producer, MapMessage message)
        {
            IMapMessage mapMessage = producer.CreateMapMessage();

            foreach (string key in message.Properties.Keys)
            {
                mapMessage.Properties[key] = message.Properties[key];
            }

            foreach (string key in message.Body.Keys)
            {
                mapMessage.Body[key] = message.Body[key];
            }

            _logger.DebugFormat("开始向 {0} 发送消息", _nm);
            try
            {
                if (isFirst)
                {
                    DateTime old = DateTime.Now;
                    producer.Send(mapMessage);
                    isFast = ((DateTime.Now - old) < TimeSpan.FromSeconds(1));
                    if (!isFast)
                    {
                        _logger.DebugFormat("向 {0} 发送消息发现耗时太长, 决定以后跳过!", _nm);
                    }

                    isFirst = false;
                }
                else if (isFast)
                {
                    producer.Send(mapMessage);
                    _logger.DebugFormat("向 {0} 发送消息完成", _nm);
                }
                else
                {
                    throw new ApplicationException("发送消息耗时太长, 决定跳过");
                }
            }
            catch (Exception e)
            {
                if (_logger.IsDebugEnabled)
                {
                    _logger.Debug(string.Format("向 {0} 发送消息发生错误", _nm), e);
                }
                throw;
            }
        }
        private static void RunWithOptions(CommandLineOpts opts)
        {
            ITrace logger = new Logger(Logger.ToLogLevel(opts.logLevel));

            Tracer.Trace = logger;

            string ip          = opts.host;
            Uri    providerUri = new Uri(ip);

            Console.WriteLine("scheme: {0}", providerUri.Scheme);

            IConnection conn = null;

            if (opts.topic == null && opts.queue == null)
            {
                Console.WriteLine("ERROR: Must specify a topic or queue destination");
                return;
            }
            try
            {
                NmsConnectionFactory factory = new NmsConnectionFactory(ip);
                if (opts.username != null)
                {
                    factory.UserName = opts.username;
                }
                if (opts.password != null)
                {
                    factory.Password = opts.password;
                }
                if (opts.clientId != null)
                {
                    factory.ClientId = opts.clientId;
                }

                if (opts.connTimeout != default)
                {
                    factory.SendTimeout = opts.connTimeout;
                }

                Console.WriteLine("Creating Connection...");
                conn = factory.CreateConnection();
                conn.ExceptionListener += (logger as Logger).LogException;
                Console.WriteLine("Created Connection.");
                Console.WriteLine("Version: {0}", conn.MetaData);
                Console.WriteLine("Creating Session...");
                ISession ses = conn.CreateSession();
                Console.WriteLine("Session Created.");

                conn.Start();
                IDestination dest = (opts.topic == null) ? (IDestination)ses.GetQueue(opts.queue) : (IDestination)ses.GetTopic(opts.topic);
                Console.WriteLine("Creating Message Producer for : {0}...", dest);
                IMessageProducer prod     = ses.CreateProducer(dest);
                IMessageConsumer consumer = ses.CreateConsumer(dest);
                Console.WriteLine("Created Message Producer.");
                prod.DeliveryMode = opts.mode == 0 ? MsgDeliveryMode.NonPersistent : MsgDeliveryMode.Persistent;
                prod.TimeToLive   = TimeSpan.FromSeconds(20);
                IMapMessage    mapMsg    = prod.CreateMapMessage();
                IStreamMessage streamMsg = prod.CreateStreamMessage();

                Console.WriteLine("Starting Connection...");
                conn.Start();
                Console.WriteLine("Connection Started: {0} Resquest Timeout: {1}", conn.IsStarted, conn.RequestTimeout);
                Tracer.InfoFormat("Sending MapMsg");
                // Map Msg Body
                mapMsg.Body.SetString("mykey", "Hello World!");
                mapMsg.Body.SetBytes("myBytesKey", new byte[] { 0x6d, 0x61, 0x70 });
                Console.WriteLine("Sending Msg: {0}", mapMsg.ToString());
                prod.Send(mapMsg);
                mapMsg.ClearBody();

                // Stream  Msg Body
                streamMsg.WriteBytes(new byte[] { 0x53, 0x74, 0x72 });
                streamMsg.WriteInt64(1354684651565648484L);
                streamMsg.WriteObject("bar");
                streamMsg.Properties["foobar"] = 42 + "";
                Console.WriteLine("Sending Msg: {0}", streamMsg.ToString());
                prod.Send(streamMsg);
                streamMsg.ClearBody();

                IMessage rmsg = null;
                for (int i = 0; i < 2; i++)
                {
                    Tracer.InfoFormat("Waiting to receive message {0} from consumer.", i);
                    rmsg = consumer.Receive(TimeSpan.FromMilliseconds(opts.connTimeout));
                    if (rmsg == null)
                    {
                        Console.WriteLine("Failed to receive Message in {0}ms.", opts.connTimeout);
                    }
                    else
                    {
                        Console.WriteLine("Received Message with id {0} and contents {1}.", rmsg.NMSMessageId, rmsg.ToString());
                        foreach (string key in rmsg.Properties.Keys)
                        {
                            Console.WriteLine("Message contains Property[{0}] = {1}", key, rmsg.Properties[key].ToString());
                        }
                    }
                }
                if (conn.IsStarted)
                {
                    Console.WriteLine("Closing Connection...");
                    conn.Close();
                    Console.WriteLine("Connection Closed.");
                }
            }
            catch (NMSException ne)
            {
                Console.WriteLine("Caught NMSException : {0} \nStack: {1}", ne.Message, ne);
            }
            catch (Exception e)
            {
                Console.WriteLine("Caught unexpected exception : {0}", e);
            }
            finally
            {
                if (conn != null)
                {
                    conn.Dispose();
                }
            }
        }
Esempio n. 4
0
 public IMapMessage CreateMapMessage()
 {
     Used?.Invoke();
     return(_producer.CreateMapMessage());
 }
 /// <summary>
 /// Creates the map message.
 /// </summary>
 /// <returns>a new map message.</returns>
 public IMapMessage CreateMapMessage()
 {
     return(target.CreateMapMessage());
 }
Esempio n. 6
0
        void Send(IMessageProducer producer, MapMessage message)
        {
            IMapMessage mapMessage = producer.CreateMapMessage();
            foreach (KeyValuePair<string, object> kp in message.Properties)
            {
                mapMessage.Properties[kp.Key] = kp.Value;
            }

            foreach (KeyValuePair<string, object> kp in message.Body)
            {
                mapMessage.Body[kp.Key] = kp.Value;
            }

            _logger.DebugFormat("开始向 {0} 发送消息", _nm);
            try
            {
                if (isDefault)
                {
                    producer.Send(mapMessage);
                }
                else if (isFast)
                {
                    DateTime old = DateTime.Now;
                    producer.Send(mapMessage);
                    isFast = ((DateTime.Now - old) < TimeSpan.FromSeconds(1));
                    if (!isFast)
                        _logger.DebugFormat("向 {0} 发送消息发现耗时太长, 决定以后跳过!", _nm);
                }
                else
                {
                    throw new ApplicationException("发送消息耗时太长, 决定跳过");
                }

            }
            catch (Exception e)
            {
                if (_logger.IsDebugEnabled)
                    _logger.Debug(string.Format("向 {0} 发送消息发生错误", _nm), e);
                throw;
            }
        }