我在rabbitmq上工作,我很困惑,有点喜欢。 我刚实现从互联网的样品它创建了一个队列,然后将其取 从该队列从而显示在网页上的它的消息。 现在我的问题是:: 假设我的服务器已安装的RabbitMQ和多用户访问这个网站,我 已经实现了rabbitmq.Now,第一用户发送消息,而是whome它会发送此消息? 所有谁就会打开该网页,因为代码将是发送的消息和队列的名称 也将是相同的公共用户。RabbitMq的实际应用
假设,第一用户发送一个消息=“你好”队列“队列1” 现在,一个其他用户发送另一个消息=“Hello 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
{
}
}
我不是对这个问题很清楚。 RabbitMQ问题是您正在努力的吗? RabbitMQ提供消息传递,您提供应用程序。 –
先生,我的问题很简单。我有一个网站,我正在实施rabbitMq。如您所知,该网站用于发送和接收邮件。为此,它创建一个队列并在其中存储一条消息,并在接收消息时使用相同的队列。现在,假设该网站的第一个用户发送消息并且队列保存此消息,现在另一个用户发送消息,现在会发生什么。我是否应该创建一个不同的队列或者同一个队列可以存储这个队列。我使用相同的队列,但在接收时,我只是获取第一条消息,而不是第二位用户发送的消息。 – Sandy
这真的取决于你如何设置RabbitMQ。是的,您可以使用单个队列并处理多条消息。但是你已经遗漏了很多信息。您是否使用直接,粉丝或话题交换?你的队列如何配置?如果你显示你的实际代码(在问题中),也许我们可以帮助:) –