zoukankan      html  css  js  c++  java
  • 在CentOS7上安装RabbitMQ

    安装过程参考官网:

    Installing on RPM-based Linux (RHEL, CentOS, Fedora, openSUSE)

    首先需要安装erlang,参考:http://fedoraproject.org/wiki/EPEL/FAQ#howtouse

    rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
    yum install erlang

    安装过程中会有提示,一路输入“y”即可。

    完成后安装RabbitMQ:

    先下载rpm:

    wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

    下载完成后安装:

    yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm 

    完成后启动服务:

    service rabbitmq-server start

    可以查看服务状态:

    service rabbitmq-server status

    这里可以看到log文件的位置,转到文件位置,打开文件:

    这里显示的是没有找到配置文件,我们可以自己创建这个文件

    cd /etc/rabbitmq/
    vi rabbitmq.config

    编辑内容如下:

    [{rabbit, [{loopback_users, []}]}].

    这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。

    保存配置后重启服务:

    service rabbitmq-server stop
    service rabbitmq-server start

    此时就可以从外部访问了,但此时再看log文件,发现内容还是原来的,还是显示没有找到配置文件,可以手动删除这个文件再重启服务,不过这不影响使用

    rm rabbit@mythsky.log 
    service rabbitmq-server stop
    service rabbitmq-server start

    开放5672端口:

    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    firewall-cmd --reload 

    在Windows上进行测试:

    新建.net core控制台项目,引用RabbitMQ.Client包:

    Install-Package RabbitMQ.Client

    测试代码:

    public static void Main(string[] args)
            {
                ConnectionFactory factory = new ConnectionFactory();
                factory.UserName = "guest";
                factory.Password = "guest";
                factory.VirtualHost = "/";
                factory.HostName = "localhost";
                //factory.HostName = "10.255.19.111";
                try
                {
                    IConnection conn = factory.CreateConnection();
                    IModel model = conn.CreateModel();
                    string exchangeName = "test";
                    string queueName = "testq";
                    string routingKey = "first";
    
                    model.ExchangeDeclare(exchangeName, ExchangeType.Direct);
                    model.QueueDeclare(queueName, false, false, false, null);
                    model.QueueBind(queueName, exchangeName, routingKey, null);
                    byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
                    model.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);
                    Console.WriteLine("message sended.");
    
                    bool noAck = false;
                    BasicGetResult result = model.BasicGet(queueName, noAck);
                    if (result == null)
                    {
                        Console.Write("no message.");
                    }
                    else
                    {
                        IBasicProperties props = result.BasicProperties;
                        byte[] body = result.Body;
                        model.BasicAck(result.DeliveryTag, false);
                        string message = System.Text.Encoding.UTF8.GetString(body);
                        Console.Write(message);
                    }
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }
            }

     也可以使用官网的例子(这里更清晰):

    http://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

    发送端:

    using System;
    using RabbitMQ.Client;
    using System.Text;
    
    class Send
    {
        public static void Main()
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using(var connection = factory.CreateConnection())
            using(var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                                     durable: false,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);
    
                string message = "Hello World!";
                var body = Encoding.UTF8.GetBytes(message);
    
                channel.BasicPublish(exchange: "",
                                     routingKey: "hello",
                                     basicProperties: null,
                                     body: body);
                Console.WriteLine(" [x] Sent {0}", message);
            }
    
            Console.WriteLine(" Press [enter] to exit.");
            Console.ReadLine();
        }
    }

    接收端:

    using RabbitMQ.Client;
    using RabbitMQ.Client.Events;
    using System;
    using System.Text;
    
    class Receive
    {
        public static void Main()
        {
            var factory = new ConnectionFactory() { HostName = "localhost" };
            using(var connection = factory.CreateConnection())
            using(var channel = connection.CreateModel())
            {
                channel.QueueDeclare(queue: "hello",
                                     durable: false,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);
    
                var consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    Console.WriteLine(" [x] Received {0}", message);
                };
                channel.BasicConsume(queue: "hello",
                                     noAck: true,
                                     consumer: consumer);
    
                Console.WriteLine(" Press [enter] to exit.");
                Console.ReadLine();
            }
        }
    }

    在Windows上发送,在CentOS上接收,效果如图:

    开启管理UI:

    rabbitmq-plugins enable rabbitmq_management
    firewall-cmd --zone=public --add-port=15672/tcp --permanent
    firewall-cmd --reload

    在Windows下打开地址:

    http://10.255.19.111:15672

    用户名和密码都是 guest

    这样就可以方便管理RabbitMQ了。

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/uptothesky/p/6094357.html
Copyright © 2011-2022 走看看