RabbitMQ:从一台电脑向另一台电脑发送消息

use*_*883 5 c# console erlang lan rabbitmq

我正在尝试设置一个位于一台 PC 上的 rabbitMQ 队列,并从其他计算机接收消息并为其提供任务。我遵循了rabbit 网站上的所有教程,但这些仅适用于本地主机。有人可以解释一下我如何获得相同的代码以在两台计算机上进行通信,而不仅仅是从同一台计算机上进行通信。

我有以下代码:

发件人.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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

接收者.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);
                }
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

让这些在 2 台计算机上进行通信以将 ConnectionFactory 的主机名更改为另一台计算机的 IP 或某种程度的想法是什么?我已经在两台计算机上正确安装了rabbit,并且这段代码分别在每台计算机上正确运行。我只需要在计算机之间进行通信。

任何帮助将不胜感激。我在互联网上的任何地方都找不到任何这样的例子。

And*_*sNS 3

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};
Run Code Online (Sandbox Code Playgroud)

如果你想在服务器上不安装任何东西的情况下进行消息传递,你应该看看ZeroMQ