2013-09-23 33 views
0
  1. 我在rabbitmq上工作,我很困惑,有点喜欢。 我刚实现从互联网的样品它创建了一个队列,然后将其取 从该队列从而显示在网页上的它的消息。 现在我的问题是:: 假设我的服务器已安装的RabbitMQ和多用户访问这个网站,我 已经实现了rabbitmq.Now,第一用户发送消息,而是whome它会发送此消息? 所有谁就会打开该网页,因为代码将是发送的消息和队列的名称 也将是相同的公共用户。RabbitMq的实际应用

  2. 假设,第一用户发送一个消息=“你好”队列“队列1” 现在,一个其他用户发送另一个消息=“Hello 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 
     { 
     } 
    } 
+0

我不是对这个问题很清楚。 RabbitMQ问题是您正在努力的吗? RabbitMQ提供消息传递,您提供应用程序。 –

+0

先生,我的问题很简单。我有一个网站,我正在实施rabbitMq。如您所知,该网站用于发送和接收邮件。为此,它创建一个队列并在其中存储一条消息,并在接收消息时使用相同的队列。现在,假设该网站的第一个用户发送消息并且队列保存此消息,现在另一个用户发送消息,现在会发生什么。我是否应该创建一个不同的队列或者同一个队列可以存储这个队列。我使用相同的队列,但在接收时,我只是获取第一条消息,而不是第二位用户发送的消息。 – Sandy

+1

这真的取决于你如何设置RabbitMQ。是的,您可以使用单个队列并处理多条消息。但是你已经遗漏了很多信息。您是否使用直接,粉丝或话题交换?你的队列如何配置?如果你显示你的实际代码(在问题中),也许我们可以帮助:) –

回答

1

如果您正在创建使用RabbitMQ的你应该发布的信息所涉及的邮件系统交换,然后为该站点的每个用户附加一个队列到交易所。然后让消息交换路由到正确的用户/用户队列。

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

这些教程将是最相关的

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

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

的教程也可以在C#中使用,如果你需要的话。

+0

主席先生,请更详细地描述你的答案。因为这对初学者来说并不足够 – Sandy