我正在尝试设置一个位于一台PC上的rabbitMQ队列,并从其他计算机接收消息,为其提供任务。我已经关注了兔子网站上的所有教程,但这些只适用于本地主机。有人可以解释我如何使用相同的代码在2台计算机之间进行通信,而不仅仅是来自同一台计算机。
我有以下代码:
Sender.cs
class Send
{
static void Main(string[] args)
{
Console.WriteLine("------------------");
Console.WriteLine("RabbitMQ Test");
Console.WriteLine("------------------");
var factory = new ConnectionFactory() { HostName = "localHost" };
try
{
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("abc", false, false, false, null);
Console.WriteLine("Enter the messages you want to send (Type 'exit' to close program)...");
string message = null;
while (message != "exit")
{
message = Console.ReadLine();
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish("", "abc", null, body);
}
}
}
}
catch (Exception e)
{
string message = e.ToString();
}
}
Reciever.cs
class Recieve
{
static void Main(string[] args)
{
ConnectionFactory factory = new ConnectionFactory()
{
HostName = "localhost"
};
using (IConnection connection = factory.CreateConnection())
{
using (IModel channel = connection.CreateModel())
{
channel.QueueDeclare("abc", false, false, false, null);
QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel);
channel.BasicConsume("abc", 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("[Recieved]: {0}", message);
}
}
}
}
}
想法是通过两台计算机进行通信,将ConnectionFactory的主机名更改为另一台计算机的IP或某种程度的内容吗?我已在两台计算机上正确安装了兔子,并且此代码在每台计算机上单独运行。我只需要在计算机上进行通信。
非常感谢任何帮助。我无法在互联网上找到任何这方面的例子。
答案 0 :(得分:2)
RabbitMQ是一个集中的消息队列。您只能将其安装在服务器计算机(或服务器计算机集群)上,而不是安装在每个发布或订阅客户端上。然后,客户端将在集中式计算机上订阅或发布到队列。
在您的开发环境中,您应该决定要将两台计算机中的哪一台作为服务器。然后传递每个客户端的主机名和密码。两个客户端都应该使用相同的主机名。
var server = "http://127.0.0.1"; // An install of RabbitMQ reachable from both clients
var password = "guest";
var username = "guest";
var connectionFactory = new ConnectionFactory { HostName = server, Password = password , Username = username};
如果你想在不在服务器上安装内容的情况下传递消息,你应该看一下ZeroMQ
答案 1 :(得分:-1)
你可以查看出来的插件 - 它是为了从兔子的一个节点上的队列中获取消息消息而在另一个节点上发布这些消息,同时处理糟糕的网络(WAN)。 Check the official description