我正在研究rabbitmq,我对某些观点感到困惑。 我刚刚从互联网上实现了一个样本,它创建了一个队列,然后进行了获取 来自该队列的消息从而在网页上显示它。 现在我的问题是:: 假设我的服务器安装了RabbitmQ,并且有多个用户正在访问我所在的网站 已经实现了rabbitmq.Now,第一个用户发送消息但是它会发送此消息吗? 对于将打开该页面的所有用户,因为代码对于发送的消息和名称是通用的 队列也是一样的。
假设,第一个用户在队列“Queue1”上发送一条消息=“Hello” 现在,另一个用户在同一队列上发送另一条消息=“Hello World” 还有一个用户在同一个队列上发送一条消息=“Hello Worl World”。 现在第n个用户点击接收消息,然后将向他显示哪条消息? 第一,第二或第三个?
这意味着我的应用程序总是有一个队列?
有人可以指导我。我很困惑......
下面我将粘贴我将用于我的网站的代码示例
//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 :(得分:1)
如果您使用RabbitMQ创建消息传递系统,您应该将消息发布到交换机,然后为该站点的每个用户将一个队列附加到交换机。然后让交换路由消息到正确的用户/用户队列。
您需要更好地了解与使用RabbitMQ相关的消息传递模式
这些教程最相关
发布/订阅 http://www.rabbitmq.com/tutorials/tutorial-three-python.html
路由 http://www.rabbitmq.com/tutorials/tutorial-four-python.html
如果您需要,也可以在c#中使用这些教程。