• 亲手安装RabbitMq 3.7.2 并安装Trace插件


    ===============================================================================================
    1、安装Erlang

    yum install ntp -y
    ntpdate -u 202.112.10.36
    yum install wget xmlto gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel wxBase wxGTK wxGTK-gl perl -y

    cd /usr/local/software
    tar zxvf otp_src_19.3.tar.gz
    cd otp_src_19.3
    ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
    make && make install


    然后在配置Erlang环境变量,vi /etc/profile文件,增加下面的环境变量:

    #set erlang environment
    export PATH=$PATH:/usr/local/erlang/bin

    source /etc/profile使得文件生效

    ===============================================================================================
    #解压rabbitmq,官方给的包是xz压缩包,所以需要使用xz命令
    yum install xz -y
    xz -d rabbitmq-server-generic-unix-3.7.2.tar.xz

    #xz解压后得到.tar包,再用tar命令解压
    tar -xvf rabbitmq-server-generic-unix-3.7.2.tar

    #移动目录 看个人喜好
    cp -rf ./rabbitmq_server-3.7.2 /usr/local/
    cd /usr/local/

    #修改文件夹名
    mv rabbitmq_server-3.7.2 rabbitmq-3.7.2

    #开启管理页面插件
    cd ./rabbitmq-3.7.2/sbin/
    ./rabbitmq-plugins enable rabbitmq_management


    #启动命令,该命令ctrl+c后会关闭服务
    ./rabbitmq-server

    #在后台启动Rabbit
    ./rabbitmq-server -detached

    缺点:这是用root用户启动的,是方便了,但可能不太安全

    #关闭服务
    ./rabbitmqctl stop

    #关闭服务(kill) 找到rabbitmq服务的pid [不推荐]
    ps -ef|grep rabbitmq
    kill -9 ****


    #进入RabbitMQ安装目录
    cd /usr/local/rabbitmq-3.7.2/sbin

    #添加用户
    #rabbitmqctl add_user Username Password
    ./rabbitmqctl add_user admin admin

    #分配用户标签
    #rabbitmqctl set_user_tags User Tag
    #[administrator]:管理员标签
    ./rabbitmqctl set_user_tags admin administrator

    ./rabbitmqctl set_permissions -p '/' admin '.' '.' '.'


    # 查看已安装的插件
    ./rabbitmq-plugins list
    ./rabbitmq-plugins enable rabbitmq_tracing
    ./rabbitmqctl trace_on

     上面的软件包下载地址:链接:https://pan.baidu.com/s/1ragGo3q 密码:pyob

     

    ===========================================================================================
    RabbitMQ内存控制 硬盘控制
    https://www.cnblogs.com/haoliansheng/p/6094780.html
    
    故障一例:
    rabbitmq连接被阻塞,无法接收消息
    今天监控服务器无法显示交易信息,经过查看rabbitmq的管理平台,发现一些connection处于blocked状态,队列无法接受消息
    
    查看内存、CPU、磁盘后发现,内存、CPU指标正常,磁盘的剩余空间只剩下500M左右,检查磁盘发现另一个应用产生了大量的日志,导致磁盘空间日益减少,删除部分日志文件后,一切正常,为保证以后的正常运行,再添加一块磁盘。
    
    RabbitMQ磁盘警报
    https://www.cnblogs.com/xinxiucan/p/8041418.html
    ===========================================================================================
    .NET 平台的网络断开异常处理办法
    https://www.tuicool.com/articles/EJBrY3R
    ===========================================================================================

    7,优化配置等

    官网的配置

    http://www.rabbitmq.com/production-checklist.html

    http://www.rabbitmq.com/configure.html

    http://www.rabbitmq.com/memory.html

    http://www.rabbitmq.com/production-checklist.html#resource-limits-ram

    线上优化后配置

    [root@rabbitmq76 rabbitmq]# cat rabbitmq.conf 

    [

    {rabbit,

      [

       {loopback_users, []},

       {vm_memory_high_watermark, 0.40},              #最大使用内存40%,erlang开始GC

       {vm_memory_high_watermark_paging_ratio, 0.8},  #32G内存,32*0.8*0.2时开始持久化磁盘

       {disk_free_limit, "10GB"},                     #磁盘使用量剩余10G时,不收发消息

       {hipe_compile, true},          #开启hipe,提高erlang性能      

       {collect_statistics_interval, 10000},          #统计刷新时间默认5秒,改成10秒

       {cluster_partition_handling, autoheal}         #网络优化参数,不稳定时用这个选项

      ]

    }

    ].

    [root@rabbitmq76 rabbitmq]# cat rabbitmq-env.conf 

    RABBITMQ_NODENAME=rabbit@rabbitmq76 #节点名字,全局唯一

    RABBITMQ_MNESIA_BASE=/data/rabbitmq/data         #消息落地存放位置

    RABBITMQ_LOG_BASE=/data/rabbitmq/log             #日志位置

    RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="+A 128"     #默认65,server线程

    另外系统参数需要留有swap空间,及打开文件数rabbitmq启动进程至少需要5万,yum安装时rabbitmq启动,源码安装时root启动

    [root@rabbitmq76 rabbitmq]# cat /etc/security/limits.conf 

    * soft   nofile 65536

    * hard   nofile 131072

    * soft   nproc 10240

    * hard   nproc 20480

    备注

    内存控制:

    vm_memory_high_watermark 该值为内存阈值,默认为0.4。意思为物理内存的40%。40%的内存并不是内存的最大的限制,它是一个发布的节制,当达到40%时Erlang会做GC。最坏的情况是使用

    内存80%。如果把该值配置为0,将关闭所有的publishing 。

    rabbitmqctl set_vm_memory_high_watermark 0

    Paging 内存阈值,该值为默认为0.5,该值为vm_memory_high_watermark的20%时,将把内存数据写到磁盘。

    如机器内存16G,当RABBITMQ占用内存1.28G(16*0.4*0.2)时把内存数据放到磁盘。

    硬盘控制:

    当RabbitMQ的磁盘空闲空间小于50M(默认),生产者将被BLOCK,

    如果采用集群模式,磁盘节点空闲空间小于50M将导致其他节点的生产者都被block

    可以通过disk_free_limit来对进行配置。

    #服务器端配置详解

    http://www.cnblogs.com/zhen-rh/p/6884297.html

    .配置文件

    一般情况下,RabbitMQ的默认配置就足够了。如果希望特殊设置的话,有两个途径: 
    一个是环境变量的配置文件 rabbitmq-env.conf ; 
    一个是配置信息的配置文件 rabbitmq.config; 
    注意,这两个文件默认是没有的,如果需要必须自己创建。 
    rabbitmq-env.conf 
    这个文件的位置是确定和不能改变的,位于:/etc/rabbitmq目录下(这个目录需要自己创建)。 
    文件的内容包括了RabbitMQ的一些环境变量,常用的有:

    RABBITMQ_NODE_PORT= //端口号 
    HOSTNAME= 
    RABBITMQ_NODENAME=mq 
    RABBITMQ_CONFIG_FILE= //配置文件的路径 
    RABBITMQ_MNESIA_BASE=/rabbitmq/data //需要使用的MNESIA数据库的路径 
    RABBITMQ_LOG_BASE=/rabbitmq/log //log的路径 
    RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins //插件的路径

    具体的列表见:http://www.rabbitmq.com/configure.html#define-environment-variables

    rabbitmq.config 
    这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。 
    它既有默认的目录,也可以在rabbitmq-env.conf文件中配置。

    文件的内容详见:http://www.rabbitmq.com/configure.html#config-items

    producer.py

    # pip install pika
    
    # https://www.cnblogs.com/kerwinC/p/5967584.html
    import pika
    credentials = pika.PlainCredentials('admin','admin')
    connection = pika.BlockingConnection(pika.ConnectionParameters(
        '192.168.1.250',5672,'/',credentials))
    channel = connection.channel()
    
    # 声明queue
    channel.queue_declare(queue='durable',durable=True)
    channel.basic_publish(exchange='',
                          routing_key='durable',
                          body='Hello cheng!',
                          properties=pika.BasicProperties(
                              delivery_mode=2,  # make message persistent
                          )
                          )
    print(" [x] Sent 'Hello cheng!'")
    connection.close()
    consumer.py
    import pika
    
    credentials = pika.PlainCredentials('admin','admin')
    connection = pika.BlockingConnection(pika.ConnectionParameters(
        '192.168.1.250',5672,'/',credentials))
    channel = connection.channel()
    
    # You may ask why we declare the queue again ‒ we have already declared it in our previous code.
    # We could avoid that if we were sure that the queue already exists. For example if send.py program
    # was run before. But we're not yet sure which program to run first. In such cases it's a good
    # practice to repeat declaring the queue in both programs.
    channel.queue_declare(queue='durable',durable=True)
    
    
    def callback(ch, method, properties, body):
        print(" [x] Received %r" % body)
        ch.basic_ack(delivery_tag=method.delivery_tag)
    
    channel.basic_consume(callback,
                          queue='durable',
                          #no_ack=True
                          )
    
    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()
  • 相关阅读:
    【rust】Rust 的构建系统和包管理工具Cargo认识并初步使用(2)
    【rust】rust安装,运行第一个Rust 程序 (1)
    linux 双网卡桥接,实现网卡流量镜像与转发
    【原创】使用golang访问windows telnet服务器
    使用centos 7安装conpot
    用Redis作Mysql数据库缓存
    python解析处理snmp回显----snmp
    snmp自定义OID与文件下载----服务器端配置
    golang map输出排序
    计算机组成原理---第1章 计算机系统概述
  • 原文地址:https://www.cnblogs.com/littlehb/p/8274479.html
Copyright © 2020-2023  润新知