【问题标题】:RabbitMQ: Sending messages from one pc to anotherRabbitMQ:将消息从一台电脑发送到另一台电脑
【发布时间】:2014-07-08 08:22:48
【问题描述】:

我正在尝试在一台电脑上设置一个 rabbitMQ 队列,并从其他计算机接收消息给它任务。我遵循了兔子网站上的所有教程,但这些仅适用于本地主机。有人能解释一下我如何让相同的代码在两台计算机之间进行通信,而不仅仅是来自同一台计算机。

我有以下代码:

发件人.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);
                }
            }
        }

    }
}

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

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

【问题讨论】:

    标签: c# console erlang rabbitmq lan


    【解决方案1】:

    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

    【讨论】:

    • 感谢您的回复。我对此很陌生,不确定我是否完全理解。假设我将计算机 A 视为将发送消息的主机和计算机 B。如果计算机有 { ConnectionFactory factory = new ConnectionFactory() { HostName = "localhost" };作为连接工厂。并且计算机 B 会有 var server = "计算机 A 的 Ip 地址" var password = "计算机 A 的密码" var connectionFactory = new ConnectionFactory { HostName = server, Password = password };这是思考它的正确方式,还是我关闭?
    • 是的。您的两个客户端都应该使用相同的主机名。
    • 我已经输入了 var factory = new ConnectionFactory() { HostName = "192.168.199.95", Password = "psswrd" };和 var factory = new ConnectionFactory() { HostName = "192.168.199.95", Password = "psswrd" };我得到异常“指定的端点都不可到达”。从你所看到的来看,我做错了 IP 地址?
    • 无法帮助您。您需要调查为什么它无法访问。 IP 是否正确,是否可以从两台机器上 ping 等等。
    • 感谢您的所有回复,我相信我越来越近了。我可以ping通ip。如果我输入完全随机的 ip,我会收到不同的异常消息。所以它可以建立某种联系。我得到的错误是 rabbitmq ACCESS_REFUSED - 使用身份验证机制 PLAIN 拒绝登录。你知道吗?我有用户名和密码作为计算机的登录详细信息。这是正确的用户名和密码。很抱歉打扰你,但我无法让它工作。感谢您的任何帮助
    【解决方案2】:

    您可以查看 shovel 插件 - 它旨在从 rabbit 的一个节点上的队列中获取消息消息,并将这些消息发布到另一个节点上,同时处理不良网络 (WAN)。 Check the official description

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多