实际上是RabbitMq的实现

时间:2013-09-23 11:13:00

标签: c# asp.net .net asp.net-mvc rabbitmq

  1. 我正在研究rabbitmq,我对某些观点感到困惑。     我刚刚从互联网上实现了一个样本,它创建了一个队列,然后进行了获取     来自该队列的消息从而在网页上显示它。     现在我的问题是::     假设我的服务器安装了RabbitmQ,并且有多个用户正在访问我所在的网站     已经实现了rabbitmq.Now,第一个用户发送消息但是它会发送此消息吗?     对于将打开该页面的所有用户,因为代码对于发送的消息和名称是通用的     队列也是一样的。

  2. 假设,第一个用户在队列“Queue1”上发送一条消息=“Hello”     现在,另一个用户在同一队列上发送另一条消息=“Hello World”     还有一个用户在同一个队列上发送一条消息=“Hello Worl World”。 现在第n个用户点击接收消息,然后将向他显示哪条消息?     第一,第二或第三个?

  3. 这意味着我的应用程序总是有一个队列?

  4. 有人可以指导我。我很困惑......

    下面我将粘贴我将用于我的网站的代码示例

    //For sending the messge
      protected void btnSendMail_Click(object sender, EventArgs e)
        {
            try
            {
                var factory = new ConnectionFactory();
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        //  ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost" };
                        // // factory.UserName = txtUserEmail.Text.ToString();
                        ////  factory.Password = "password";
                        //  factory.VirtualHost = "/";
                        //  factory.Protocol = Protocols.FromEnvironment();
                        //  factory.HostName = "localhost";
                        //  factory.Port = AmqpTcpEndpoint.UseDefaultPort;
                        //  IConnection conn = factory.CreateConnection();
                        //  using (var channel = conn.CreateModel())
                        //  {
                        //      channel.QueueDeclare("hello", false, false, false, null);
                        //      string message = "Hello World!";
                        //      var body = Encoding.UTF8.GetBytes(txtUserEmail.Text.ToString());
                        //      channel.BasicPublish("", "hello", null, body);
                        //      conn.Close();
                        //  }
                        //Sending Message
                        channel.QueueDeclare("hello1", false, false, false, null);
    
                        string message = txtUserEmail.Text.ToString();
                        var body = Encoding.UTF8.GetBytes(message);
    
                        channel.BasicPublish("", "hello1", null, body);
                        //Console.WriteLine(" [x] Sent {0}", message);
                        //Console.ReadLine();
                        Label1.Text = Encoding.Default.GetString(body);
                    }
                }
    
            }
            catch
            {
            }
        }
    
    
    //For receiving the message.
     protected void btnReceive_Click(object sender, EventArgs e)
        {
            try
            {
                //var factory = new ConnectionFactory() { HostName = "localhost" };
                //using (var connection = factory.CreateConnection())
                //{
                //    using (var channel = connection.CreateModel())
                //    {
    
                //        channel.QueueDeclare("hello", false, false, false, null);
                //        BasicGetResult result = channel.BasicGet("hello", false);
                //        var consumer = new QueueingBasicConsumer(channel);
                //        channel.BasicConsume("hello", true, consumer);
                //        Console.WriteLine(" [*] Waiting for messages." +
                //                                 "To exit press CTRL+C");
                //        while (true)
                //        {
    
                //            var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
    
                //            var body = ea.Body;
                //            var message = Encoding.UTF8.GetString(body);
                //            Console.WriteLine(" [x] Received {0}", message);
                //            Label1.Text = message.ToString();
                //        }
                //    }
                //}
                var factory = new ConnectionFactory();
                using (var connection = factory.CreateConnection())
                {
                    using (var channel = connection.CreateModel())
                    {
                        bool noAck = false;
                        BasicGetResult result = channel.BasicGet("hello1", noAck);
                        if (result == null)
                        {
    
                        }
                        else
                        {
                            IBasicProperties props = result.BasicProperties;
                            byte[] Body = result.Body;
                            Label1.Text = Encoding.Default.GetString(Body);
    
                        }
                    }
                }
    
    
            }
            catch
            {
            }
        }
    

1 个答案:

答案 0 :(得分:1)

如果您使用RabbitMQ创建消息传递系统,您应该将消息发布到交换机,然后为该站点的每个用户将一个队列附加到交换机。然后让交换路由消息到正确的用户/用户队列。

您需要更好地了解与使用RabbitMQ相关的消息传递模式

这些教程最相关

发布/订阅 http://www.rabbitmq.com/tutorials/tutorial-three-python.html

路由 http://www.rabbitmq.com/tutorials/tutorial-four-python.html

如果您需要,也可以在c#中使用这些教程。