コード例 #1
0
        public void RawApiConsumer()
        {
            string host = "localhost";
            int    port = 5672;

            org.apache.qpid.client.Client client = new org.apache.qpid.client.Client();
            try
            {
                client.Connect(host, port, "dev-only", "guest", "guest");
                IClientSession session = client.CreateSession(50000);

                //

                session.QueueDeclare("message_queue");
                session.ExchangeBind("message_queue", "amq.direct", "routing_key");
                IClientSession session2 = session;
                lock (session2)
                {
                    IMessageListener listener = new MessageListener(session);
                    session.AttachMessageListener(listener, "message_queue");
                    session.MessageSubscribe("message_queue");
                    Monitor.Wait(session);
                }


                //
                client.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: \n" + e.StackTrace);
            }
        }
コード例 #2
0
        protected void TryToConnect()
        {
            reqsOutstanding = 1;
            Agent newAgent = new Agent(this, 0, "BrokerAgent");

            Agents.Add(newAgent.AgentKey(), newAgent);
            client = new Client();
            client.Connect(url.Hostname, url.Port, null, url.AuthName, url.AuthPassword);
            clientSession = client.CreateSession(timeout);
            //clientSession.SetAutoSync(false) ;
            string name = System.Text.Encoding.UTF8.GetString(clientSession.GetName());

            replyName = "reply-" + name;
            topicName = "topic-" + name;
            clientSession.SetAutoSync(true);
            Option[] options = new Option[] { Option.EXCLUSIVE, Option.AUTO_DELETE };

            // This queue is used for responses to messages which are sent.
            clientSession.QueueDeclare(replyName, options);
            clientSession.ExchangeBind(replyName, "amq.direct", replyName);
            clientSession.AttachMessageListener(this, "rdest");
            clientSession.MessageSubscribe(replyName, "rdest", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null);
            clientSession.MessageSetFlowMode("rdest", MessageFlowMode.WINDOW);
            clientSession.MessageFlow("rdest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            clientSession.MessageFlow("rdest", MessageCreditUnit.MESSAGE, ClientSession.MESSAGE_FLOW_MAX_BYTES);

            // This queue is used for unsolicited messages sent to this class.
            clientSession.QueueDeclare(topicName, options);
            clientSession.AttachMessageListener(this, "tdest");
            clientSession.MessageSubscribe(topicName, "tdest", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED, null, 0, null);
            clientSession.MessageSetFlowMode("tdest", MessageFlowMode.WINDOW);
            clientSession.MessageFlow("tdest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            clientSession.MessageFlow("tdest", MessageCreditUnit.MESSAGE, ClientSession.MESSAGE_FLOW_MAX_BYTES);

            outSession = client.CreateSession(timeout);
            outSession.ExchangeBind(replyName, "amq.direct", replyName);

            connected = true;
            consoleSession.HandleBrokerConnect(this);


            IEncoder encoder = CreateEncoder();

            this.SetHeader(encoder, 'B', 0);
            this.Send(encoder);
        }
コード例 #3
0
        private void sendAndReceive(byte[] messageBody, int count)
        {
            IClientSession ssn = Client.CreateSession(0);

            ssn.Sync();
            ssn.QueueDeclare("queue1", null, null);
            ssn.QueueDelete("queue1");
            QueueQueryResult result = (QueueQueryResult)ssn.QueueQuery("queue1").Result;

            Assert.IsNull(result.GetQueue());
            ssn.QueueDeclare("queue1", null, null);
            ssn.ExchangeBind("queue1", "amq.direct", "queue1", null);
            Object     myLock     = new Object();
            MyListener myListener = new MyListener(myLock, count);

            ssn.AttachMessageListener(myListener, "myDest");

            ssn.MessageSubscribe("queue1", "myDest", MessageAcceptMode.EXPLICIT, MessageAcquireMode.PRE_ACQUIRED, null,
                                 0, null);


            // issue credits
            ssn.MessageSetFlowMode("myDest", MessageFlowMode.WINDOW);
            ssn.MessageFlow("myDest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            ssn.MessageFlow("myDest", MessageCreditUnit.MESSAGE, 10000);
            ssn.Sync();

            for (int i = 0; i < count; i++)
            {
                ssn.MessageTransfer("amq.direct", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED,
                                    new Header(new DeliveryProperties().SetRoutingKey("queue1"),
                                               new MessageProperties().SetMessageId(UUID.RandomUuid())),
                                    messageBody);
            }
            ssn.Sync();

            lock (myLock)
            {
                if (myListener.Count != 0)
                {
                    Monitor.Wait(myLock, 10000000);
                }
            }
            Assert.IsTrue(myListener.Count == 0);
            ssn.MessageAccept(myListener.UnAck);
            ssn.Sync();
            // the queue should be empty
            result = (QueueQueryResult)ssn.QueueQuery("queue1").Result;
            Assert.IsTrue(result.GetMessageCount() == 0);
            ssn.Close();
        }
コード例 #4
0
        private static void Main(string[] args)
        {
            string host        = ConfigurationManager.AppSettings["Host"];
            int    port        = int.Parse(ConfigurationManager.AppSettings["Port"]);
            string virtualhost = ConfigurationManager.AppSettings["VirtualHost"];
            string username    = ConfigurationManager.AppSettings["Username"];
            string password    = ConfigurationManager.AppSettings["Password"];

            Client connection = new Client();

            try
            {
                connection.Connect(host, port, virtualhost, username, password);
                IClientSession session = connection.CreateSession(50000);

                //--------- Main body of program --------------------------------------------
                // Each client creates its own private queue, using the
                // session id to guarantee a unique name. It then routes
                // all messages from the fanout exchange to its own queue
                // by binding to the queue.
                //
                // The binding specifies a binding key, but for a fanout
                // exchange, the binding key is optional and is not used
                // for routing decisions. It can be useful for tracking
                // messages and routing in logs.

                string myQueue = session.Name;
                session.QueueDeclare(myQueue, Option.EXCLUSIVE, Option.AUTO_DELETE);
                session.ExchangeBind(myQueue, "amq.fanout", "my-key");

                lock (session)
                {
                    Console.WriteLine("Listening");
                    // Create a listener and subscribe it to my queue.
                    IMessageListener listener = new MessageListener(session);
                    session.AttachMessageListener(listener, myQueue);
                    session.MessageSubscribe(myQueue);
                    // Receive messages until all messages are received
                    Monitor.Wait(session);
                }

                //---------------------------------------------------------------------------

                connection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: \n" + e.StackTrace);
            }
        }
コード例 #5
0
        /// <summary>
        /// Called whenever Excel requests a new RTD topic from the RealTimeData server.
        /// </summary>
        /// <param name="TopicID"></param>
        /// <param name="Strings"></param>
        /// <param name="GetNewValues"></param>
        /// <returns></returns>
        public object ConnectData(int TopicID, ref Array Strings, ref bool GetNewValues)
        {
            try
            {
                string queuename       = "defaultExcelAddInQueue";
                string destinationName = "ExcelAddIn-" + queuename;
                if (Strings.Length > 0)
                {
                    queuename = (string)Strings.GetValue(0);
                }
                // Error message if the queue does not exist
                QueueQueryResult result = (QueueQueryResult)_session.QueueQuery(queuename).Result;
                if (result.GetQueue() == null)
                {
                    System.Windows.Forms.MessageBox.Show("Error: \n queue " + queuename + " does not exist");
                    return("error");
                }

                QpidListener listener;
                _topicMessages.Add(TopicID, null);
                _topicQueueName.Add(TopicID, queuename);
                if (_queueListener.ContainsKey(queuename))
                {
                    listener = _queueListener[queuename];
                    listener.addTopic(TopicID);
                }
                else
                {
                    listener = new QpidListener(this);
                    listener.addTopic(TopicID);
                    _queueListener.Add(queuename, listener);
                    _session.AttachMessageListener(listener, destinationName);
                    _session.MessageSubscribe(queuename, destinationName, MessageAcceptMode.EXPLICIT,
                                              MessageAcquireMode.PRE_ACQUIRED, null, 0, null);
                    // issue credits
                    _session.MessageSetFlowMode(destinationName, MessageFlowMode.WINDOW);
                    _session.MessageFlow(destinationName, MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
                    _session.MessageFlow(destinationName, MessageCreditUnit.MESSAGE, 1000);
                    _session.Sync();
                }
            }
            catch (Exception e)
            {
                System.Windows.Forms.MessageBox.Show("Error: \n" + e.StackTrace);
                return("error");
            }
            return("waiting");
        }
コード例 #6
0
        static void Main(string[] args)
        {
            string host        = ConfigurationManager.AppSettings["Host"];
            int    port        = int.Parse(ConfigurationManager.AppSettings["Port"]);
            string virtualhost = ConfigurationManager.AppSettings["VirtualHost"];
            string username    = ConfigurationManager.AppSettings["Username"];
            string password    = ConfigurationManager.AppSettings["Password"];

            Client connection = new Client();

            try
            {
                connection.Connect(host, port, virtualhost, username, password);
                IClientSession session = connection.CreateSession(50000);

                //--------- Main body of program --------------------------------------------
                // Create a request queue for clients to use when making
                // requests.
                const string request_queue = "request";
                // Use the name of the request queue as the routing key
                session.QueueDeclare(request_queue);
                session.ExchangeBind(request_queue, "amq.direct", request_queue);

                lock (session)
                {
                    // Create a listener and subscribe it to the request_queue
                    IMessageListener listener = new MessageListener(session);
                    session.AttachMessageListener(listener, request_queue);
                    session.MessageSubscribe(request_queue);
                    // Receive messages until all messages are received
                    Console.WriteLine("Waiting for requests");
                    Monitor.Wait(session);
                }

                //---------------------------------------------------------------------------

                connection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: \n" + e.StackTrace);
            }
        }
コード例 #7
0
        private static void Main(string[] args)
        {
            string host        = ConfigurationManager.AppSettings["Host"];
            int    port        = int.Parse(ConfigurationManager.AppSettings["Port"]);
            string virtualhost = ConfigurationManager.AppSettings["VirtualHost"];
            string username    = ConfigurationManager.AppSettings["Username"];
            string password    = ConfigurationManager.AppSettings["Password"];

            Client connection = new Client();

            try
            {
                connection.Connect(host, port, virtualhost, username, password);
                IClientSession session = connection.CreateSession(50000);

                //--------- Main body of program --------------------------------------------
                // Create a queue named "message_queue", and route all messages whose
                // routing key is "routing_key" to this newly created queue.

                session.QueueDeclare("message_queue");
                session.ExchangeBind("message_queue", "amq.direct", "routing_key");

                lock (session)
                {
                    // Create a listener and subscribe it to the queue named "message_queue"
                    IMessageListener listener = new MessageListener(session);
                    session.AttachMessageListener(listener, "message_queue");
                    session.MessageSubscribe("message_queue");
                    // Receive messages until all messages are received
                    Monitor.Wait(session);
                }

                //---------------------------------------------------------------------------

                connection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: \n" + e.StackTrace);
            }
        }
コード例 #8
0
        private static void prepareQueue(string queue, string routing_key, IClientSession session)
        {
            // Create a unique queue name for this consumer by concatenating
            // the queue name parameter with the Session ID.
            Console.WriteLine("Declaring queue: " + queue);
            session.QueueDeclare(queue, Option.EXCLUSIVE, Option.AUTO_DELETE);

            // Route messages to the new queue if they match the routing key.
            // Also route any messages to with the "control" routing key to
            // this queue so we know when it's time to stop. A publisher sends
            // a message with the content "That's all, Folks!", using the
            // "control" routing key, when it is finished.

            session.ExchangeBind(queue, "amq.topic", routing_key);
            session.ExchangeBind(queue, "amq.topic", "control");

            // subscribe the listener to the queue
            IMessageListener listener = new MessageListener(session);

            session.AttachMessageListener(listener, queue);
            session.MessageSubscribe(queue);
        }
コード例 #9
0
        private static void Main(string[] args)
        {
            string host        = ConfigurationManager.AppSettings["Host"];
            int    port        = int.Parse(ConfigurationManager.AppSettings["Port"]);
            string virtualhost = ConfigurationManager.AppSettings["VirtualHost"];
            string username    = ConfigurationManager.AppSettings["Username"];
            string password    = ConfigurationManager.AppSettings["Password"];

            Client connection = new Client();

            try
            {
                connection.Connect(host, port, virtualhost, username, password);
                IClientSession session = connection.CreateSession(50000);
                IMessage       request = new Message();

                //--------- Main body of program --------------------------------------------
                // Create a response queue so the server can send us responses
                // to our requests. Use the client's session ID as the name
                // of the response queue.
                string response_queue = "client" + session.GetName();
                // Use the name of the response queue as the routing key
                session.QueueDeclare(response_queue);
                session.ExchangeBind(response_queue, "amq.direct", response_queue);

                // Each client sends the name of their own response queue so
                // the service knows where to route messages.
                request.DeliveryProperties.SetRoutingKey("request");
                request.MessageProperties.SetReplyTo(new ReplyTo("amq.direct", response_queue));

                lock (session)
                {
                    // Create a listener for the response queue and listen for response messages.
                    Console.WriteLine("Activating response queue listener for: " + response_queue);
                    IMessageListener listener = new ClientMessageListener(session);
                    session.AttachMessageListener(listener, response_queue);
                    session.MessageSubscribe(response_queue);

                    // Now send some requests ...
                    string[] strs =
                    {
                        "Twas brillig, and the slithy toves",
                        "Did gire and gymble in the wabe.",
                        "All mimsy were the borogroves,",
                        "And the mome raths outgrabe.",
                        "That's all, folks!"
                    };
                    foreach (string s in strs)
                    {
                        request.ClearData();
                        request.AppendData(Encoding.UTF8.GetBytes(s));
                        session.MessageTransfer("amq.direct", request);
                    }
                    Console.WriteLine("Waiting for all responses to arrive ...");
                    Monitor.Wait(session);
                }
                //---------------------------------------------------------------------------

                connection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: \n" + e.StackTrace);
            }
        }
コード例 #10
0
        public void setHeaders()
        {
            _log.Debug("Running: setHeaders");
            IClientSession ssn = Client.CreateSession(0);

            ssn.QueueDeclare("queue1");
            ssn.ExchangeBind("queue1", "amq.direct", "queue1");
            ssn.Sync();
            CircularBuffer <IMessage> buff = new CircularBuffer <IMessage>(10);
            SyncListener listener          = new SyncListener(ssn, buff);

            ssn.AttachMessageListener(listener, "queue1");
            ssn.MessageSubscribe("queue1");

            IMessage message = new org.apache.qpid.client.Message();

            message.DeliveryProperties.SetRoutingKey("queue1");
            const long someLong = 14444444;

            message.ApplicationHeaders.Add("someLong", someLong);
            const int someInt = 14;

            message.ApplicationHeaders.Add("soneInt", someInt);
            const float someFloat = 14.001F;

            message.ApplicationHeaders.Add("soneFloat", someFloat);
            const double someDouble = 14.5555555;

            message.ApplicationHeaders.Add("someDouble", someDouble);
            const byte someByte = 2;

            message.ApplicationHeaders.Add("someByte", someByte);
            const string someString = "someString";

            message.ApplicationHeaders.Add("someString", someString);
            const char someChar = 'a';

            message.ApplicationHeaders.Add("someChar", someChar);
            const Boolean someBoolean = true;

            message.ApplicationHeaders.Add("someBoolean", someBoolean);

            // transfer the message
            ssn.MessageTransfer("amq.direct", message);

            // get the message and check the headers
            IMessage messageBack = buff.Dequeue();

            Assert.IsTrue(((string)messageBack.ApplicationHeaders["someString"]).Equals(someString));
            Assert.IsTrue(((char)messageBack.ApplicationHeaders["someChar"]).Equals(someChar));
            Assert.IsTrue((long)messageBack.ApplicationHeaders["someLong"] == someLong);
            Assert.IsTrue((int)messageBack.ApplicationHeaders["soneInt"] == someInt);
            Assert.IsTrue((double)messageBack.ApplicationHeaders["someDouble"] == someDouble);
            Assert.IsTrue((byte)messageBack.ApplicationHeaders["someByte"] == someByte);
            Assert.IsTrue((Boolean)messageBack.ApplicationHeaders["someBoolean"]);
            // c# has an conversion precision issue with decimal
            Assert.IsTrue((float)messageBack.ApplicationHeaders["soneFloat"] <= someFloat);
            float b = (float)messageBack.ApplicationHeaders["soneFloat"];

            Assert.IsTrue(Convert.ToInt32(b) == Convert.ToInt32(someFloat));
        }
コード例 #11
0
        static void Main(string[] args)
        {
            XmlConfigurator.Configure(new FileInfo("..\\..\\log.xml"));
            // DOMConfigurator.Configure()

            string          host           = ConfigurationManager.AppSettings["Host"];
            int             port           = int.Parse(ConfigurationManager.AppSettings["Port"]);
            string          virtualhost    = ConfigurationManager.AppSettings["VirtualHost"];
            string          username       = ConfigurationManager.AppSettings["Username"];
            string          password       = ConfigurationManager.AppSettings["Password"];
            IConnectionInfo connectionInfo = new QpidConnectionInfo();

            connectionInfo.VirtualHost = virtualhost;
            //connectionInfo.host = host;
            //connectionInfo.port = port;
            connectionInfo.Username = username;
            connectionInfo.Password = password;

            //Client client = new Client();

            Console.WriteLine("Client created");
            //client.Connect(host, port, virtualhost, username, password);
            IConnection clientConnection = new AMQConnection(connectionInfo);

            Console.WriteLine("Connection established");

            IClientSession ssn = client.CreateSession(50000);

            Console.WriteLine("Session created");
            ssn.QueueDeclare("queue1", null, null);
            ssn.ExchangeBind("queue1", "amq.direct", "queue1", null);


            Object wl = new Object();

            ssn.AttachMessageListener(new MyListener(ssn, wl), "myDest");

            ssn.MessageSubscribe("queue1", "myDest", MessageAcceptMode.EXPLICIT, MessageAcquireMode.PRE_ACQUIRED, null,
                                 0, null);
            DateTime start = DateTime.Now;

            // issue credits
            ssn.MessageSetFlowMode("myDest", MessageFlowMode.WINDOW);
            ssn.MessageFlow("myDest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            ssn.MessageFlow("myDest", MessageCreditUnit.MESSAGE, 10000);
            ssn.Sync();


            for (int i = 0; i < 10000; i++)
            {
                ssn.MessageTransfer("amq.direct", MessageAcceptMode.NONE, MessageAcquireMode.PRE_ACQUIRED,
                                    new Header(new DeliveryProperties().SetRoutingKey("queue1"),
                                               new MessageProperties().SetMessageId(UUID.RandomUuid())),
                                    Encoding.UTF8.GetBytes("test: " + i));
            }

            lock (wl)
            {
                Monitor.Wait(wl);
            }
            DateTime now = DateTime.Now;

            Console.WriteLine("Start time " + start + " now: " + now);

            Console.WriteLine("Done time: " + (now - start));
            lock (wl)
            {
                Monitor.Wait(wl, 30000);
            }
            client.Close();
        }
コード例 #12
0
ファイル: Broker.cs プロジェクト: drzo/opensim4opencog
		protected void TryToConnect() {
			reqsOutstanding = 1 ;		
			Agent newAgent = new Agent(this,0,"BrokerAgent") ;
			Agents.Add(newAgent.AgentKey(), newAgent) ;
			client = new Client() ;
			client.Connect(url.Hostname, url.Port, null, url.AuthName, url.AuthPassword) ;
			clientSession = client.CreateSession(timeout) ;		
			//clientSession.SetAutoSync(false) ;
			string name = System.Text.Encoding.UTF8.GetString(clientSession.GetName()) ;
			replyName = "reply-" + name ;
			topicName = "topic-" + name ;
			clientSession.SetAutoSync(true) ;
			Option[] options = new Option[] {Option.EXCLUSIVE, Option.AUTO_DELETE} ;
		
			// This queue is used for responses to messages which are sent.	
			clientSession.QueueDeclare(replyName,options) ;
			clientSession.ExchangeBind(replyName,"amq.direct",replyName) ;
			clientSession.AttachMessageListener(this, "rdest") ;			
			clientSession.MessageSubscribe(replyName,"rdest",MessageAcceptMode.NONE,MessageAcquireMode.PRE_ACQUIRED,null,0,null) ;			  			  						
            clientSession.MessageSetFlowMode("rdest", MessageFlowMode.WINDOW);
            clientSession.MessageFlow("rdest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            clientSession.MessageFlow("rdest", MessageCreditUnit.MESSAGE, ClientSession.MESSAGE_FLOW_MAX_BYTES);  			
		
			// This queue is used for unsolicited messages sent to this class.
			clientSession.QueueDeclare(topicName, options) ;
			clientSession.AttachMessageListener(this, "tdest") ;			
			clientSession.MessageSubscribe(topicName,"tdest",MessageAcceptMode.NONE,MessageAcquireMode.PRE_ACQUIRED,null,0,null) ;							  									
            clientSession.MessageSetFlowMode("tdest", MessageFlowMode.WINDOW);
            clientSession.MessageFlow("tdest", MessageCreditUnit.BYTE, ClientSession.MESSAGE_FLOW_MAX_BYTES);
            clientSession.MessageFlow("tdest", MessageCreditUnit.MESSAGE, ClientSession.MESSAGE_FLOW_MAX_BYTES);  				
			
			outSession = client.CreateSession(timeout) ;	
			outSession.ExchangeBind(replyName,"amq.direct",replyName) ;
			
			connected = true ;
			consoleSession.HandleBrokerConnect(this) ;		
				
			
			IEncoder encoder = CreateEncoder() ;
			this.SetHeader(encoder, 'B', 0) ;
			this.Send(encoder) ;
		}
コード例 #13
0
ファイル: Listener.cs プロジェクト: drzo/opensim4opencog
        private static void prepareQueue(string queue, string routing_key, IClientSession session)
        {
            // Create a unique queue name for this consumer by concatenating
            // the queue name parameter with the Session ID.     
            Console.WriteLine("Declaring queue: " + queue);
            session.QueueDeclare(queue, Option.EXCLUSIVE, Option.AUTO_DELETE);

            // Route messages to the new queue if they match the routing key.
            // Also route any messages to with the "control" routing key to
            // this queue so we know when it's time to stop. A publisher sends
            // a message with the content "That's all, Folks!", using the
            // "control" routing key, when it is finished.

            session.ExchangeBind(queue, "amq.topic", routing_key);
            session.ExchangeBind(queue, "amq.topic", "control");

            // subscribe the listener to the queue
            IMessageListener listener = new MessageListener(session);
            session.AttachMessageListener(listener, queue);
            session.MessageSubscribe(queue);
        }