0
  1. 我正在研究rabbitmq,我对某些观点感到困惑,例如。我刚刚从 Internet 实现了一个示例,该示例创建了一个队列,然后从该队列中获取消息,从而将其显示在网页上。现在我的问题是:: 假设我的服务器安装了 RabbitmQ,并且多个用户正在访问我实施了 rabbitmq 的这个网站。现在,第一个用户发送一条消息,但它将向谁发送这条消息?致所有打开页面的用户,因为发送消息的代码是通用的,队列的名称也相同。

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

  3. 这意味着我们将始终为我的应用程序提供一个队列?

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

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

//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
        {
        }
    }
4

1 回答 1

1

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

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

这些教程将是最相关的

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

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

如果需要,这些教程也可以在 c# 中获得。

于 2013-09-23T14:49:19.770 回答