IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    linux下安装rabbitmq及php-amqplib

    C1G发表于 2023-02-28 12:37:32
    love 0

    补发丢失的贴子。

    linux下安装rabbitmq及php-amqplib

    一.linux 安装 git

    yum 自带git 版本太低了
    git version 1.7.1

    yum remove git
    yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
    https://github.com/git/git/archive/v2.21.0.tar.gz
    tar zxvf v2.21.0.tar.gz
    cd git-2.21.0/
    make configure
    ./configure –prefix=/usr/local/git –with-iconv=/usr/local/
    make
    make install

    /usr/local/git/bin/git –version
    git version 2.21.0

    ln -s /usr/local/git/bin/git /usr/bin/git

    git clone –no-checkout ‘https://github.com/php-amqplib/php-amqplib.git’ ‘/opt/php-5.4.45_phar/lib/composer/vendor/php-amqplib/php-amqplib’

    SSL connect error fatal: unable to access ‘https://github.com/php-amqplib/php-amqplib.git/’: SSL connect error
    git config –global http.sslversion tlsv1 vi /etc/hosts 192.30.255.112 github.com

    二.安装composer

    Composer 需要 PHP 5.3.2+ openssl 1.0.1+才能运行。

    openssl version
    OpenSSL 1.0.1e-fips 11 Feb 2013
    php编译时不能带–with-curlwrappers 和–disable-phar

    php查看编译参数
    php -i |grep configure
    Configure Command => ‘./configure’ ‘–prefix=/opt/php-5.4.45’ ‘–with-config-file-path=/opt/php-5.4.45/etc’ ‘–with-mysql=/opt/mysql’ ‘–with-mysqli=/opt/mysql/bin/mysql_config’ ‘–with-iconv-dir=/usr/local’ ‘–with-freetype-dir’ ‘–with-jpeg-dir’ ‘–with-png-dir’ ‘–with-zlib’ ‘–with-libxml-dir=/usr’ ‘–disable-rpath’ ‘–enable-bcmath’ ‘–enable-shmop’ ‘–enable-sysvsem’ ‘–enable-inline-optimization’ ‘–with-curl’ ‘–with-curlwrappers’ ‘–enable-mbregex’ ‘–enable-cgi’ ‘–enable-fpm’ ‘–enable-mbstring’ ‘–with-mcrypt’ ‘–with-gd’ ‘–enable-gd-native-ttf’ ‘–with-openssl’ ‘–with-mhash’ ‘–enable-pcntl’ ‘–enable-sockets’ ‘–with-xmlrpc’ ‘–enable-zip’ ‘–enable-soap’ ‘–enable-xml’ ‘–disable-debug’ ‘–disable-ipv6’ ‘–without-pear’ ‘–disable-phar’ ‘–enable-ftp’ ‘–with-pdo-mysql=/opt/mysql’

    –disable-phar 错误

    Some settings on your machine make Composer unable to work properly.
    Make sure that you fix the issues listed below and run this script again:

    The phar extension is missing.
    Install it or recompile php without –disable-phar

    –with-curlwrappers 错误
    PHP was compiled with –with-curlwrappers which will cause issues with HTTP authentication and GitHub. Recompile it without this flag if possible

    git 没安装错误
    sh: git: command not found

    wget https://getcomposer.org/composer.phar ln -s /opt/php/bin/php /usr/bin/php php composer.phar
    这将返回给你一个可执行的命令列表。

    或者安装成全局方式
    mv composer.phar /usr/bin/composer chmod +x /usr/bin/composer composer
    创建一个composer.json
    { “require”: { “monolog/monolog”: “1.0.*”, “php-amqplib/php-amqplib”: “>=2.6.1” } }

    创建国内镜像
    composer clearcache composer config -g repo.packagist composer https://packagist.phpcomposer.com

    建议不要用root运行,
    运行时compose会在当前用户下创建一个可写的cache目录/home//.compose
    sudo -uandychu composer config -g repo.packagist composer https://packagist.phpcomposer.com
    会composer.json中添加
    “repositories”: { “packagist”: { “type”: “composer”, “url”: “https://packagist.phpcomposer.com” } }

    命令行下
    php composer.phar install
    或者全局方式
    composer up

    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 1 install, 0 updates, 0 removals

    • Installing php-amqplib/php-amqplib (v2.8.1): Downloading (failed)
      Downloading (failed)
      Downloading (failed) Failed to download php-amqplib/php-amqplib from dist: Th
      e “https://api.github.com/repos/php-amqplib/php-amqplib/zipball/84449ffd3f5a7466
      bbee3946facb3746ff11f075″ file could not be downloaded: SSL operation failed wit
      h code 1. OpenSSL Error messages:
      error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
      Failed to enable crypto
      failed to open stream: operation failed
      Now trying to download from source
    • Installing php-amqplib/php-amqplib (v2.8.1): Cloning 84449ffd3f from cache
      Writing lock file
      Generating autoload files

    vi php.ini
    将/opt/php-5.4.45_phar/lib/composer 放入include_path和 open_basedir

    reload php

    三.linux 安装 Erlang


    yum install ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-term ocaml-curses ocaml-curses-devel -y
    wget http://erlang.org/download/otp_src_21.2.tar.gz
    tar zxvf otp_src_21.2.tar.gz
    cd otp_src_21.2
    ./configure –with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll –enable-hipe –without-javac
    make
    make install
    /usr/local/bin/erl
    Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:40:40] [ds:40:40:10] [async-threads:1] [hipe]

    Eshell V10.2 (abort with ^G)
    1> halt().

    四.linux 安装 rabbitmq

    http://www.rabbitmq.com/download.html
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.11/rabbitmq-server-generic-unix-3.7.11.tar.xz tar xvf rabbitmq-server-generic-unix-3.7.11.tar.xz mv rabbitmq_server-3.7.11 /opt/ cd /opt ln -s rabbitmq_server-3.7.11 rabbitmq cd /opt/rabbitmq/sbin ./rabbitmq-server &


    ## ##
    ## ## RabbitMQ 3.7.11. Copyright (C) 2007-2019 Pivotal Software, Inc.
    ########## Licensed under the MPL. See http://www.rabbitmq.com/
    ###### ##
    ########## Logs: /opt/rabbitmq/var/log/rabbitmq/rabbit@c1gstudio.log
    /opt/rabbitmq/var/log/rabbitmq/rabbit@c1gstudio_upgrade.log

              Starting broker...

    completed with 0 plugins.

    [bin]# ./rabbitmqctl status
    Status of node rabbit@c1gstudio …
    [{pid,28884},
    {running_applications,
    [{rabbit,”RabbitMQ”,”3.7.11″},
    {mnesia,”MNESIA CXC 138 12″,”4.15.5″},
    {os_mon,”CPO CXC 138 46″,”2.4.7″},
    {sysmon_handler,”Rate-limiting system_monitor event handler”,”1.1.0″},
    {rabbit_common,
    “Modules shared by rabbitmq-server and rabbitmq-erlang-client”,
    “3.7.11”},
    {ranch,”Socket acceptor pool for TCP protocols.”,”1.7.1″},
    {ssl,”Erlang/OTP SSL application”,”9.1″},
    {public_key,”Public key infrastructure”,”1.6.4″},
    {asn1,”The Erlang ASN1 compiler version 5.0.8″,”5.0.8″},
    {inets,”INETS CXC 138 49″,”7.0.3″},
    {recon,”Diagnostic tools for production use”,”2.3.6″},
    {xmerl,”XML parser”,”1.3.18″},
    {jsx,”a streaming, evented json parsing toolkit”,”2.9.0″},
    {crypto,”CRYPTO”,”4.4″},
    {lager,”Erlang logging framework”,”3.6.5″},
    {goldrush,”Erlang event stream processor”,”0.1.9″},
    {compiler,”ERTS CXC 138 10″,”7.3″},
    {syntax_tools,”Syntax tools”,”2.1.6″},
    {sasl,”SASL CXC 138 11″,”3.3″},
    {stdlib,”ERTS CXC 138 10″,”3.7″},
    {kernel,”ERTS CXC 138 10″,”6.2″}]},
    {os,{unix,linux}},
    {erlang_version,
    “Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:40:40] [ds:40:40:10] [async-threads:640] [hipe]\n”},
    {memory,
    [{connection_readers,0},
    {connection_writers,0},
    {connection_channels,0},
    {connection_other,0},
    {queue_procs,0},
    {queue_slave_procs,0},
    {plugins,10044},
    {other_proc,33404336},
    {metrics,197308},
    {mgmt_db,0},
    {mnesia,73360},
    {other_ets,2314472},
    {binary,150240},
    {msg_index,29488},
    {code,20364814},
    {atom,1082561},
    {other_system,30248961},
    {allocated_unused,50253824},
    {reserved_unallocated,0},
    {strategy,rss},
    {total,[{erlang,87875584},{rss,113528832},{allocated,138129408}]}]},
    {alarms,[]},
    {listeners,[{clustering,25672,”::”},{amqp,5672,”0.0.0.0″}]},
    {vm_memory_calculation_strategy,rss},
    {vm_memory_high_watermark,0.4},
    {vm_memory_limit,13413631590},
    {disk_free_limit,50000000},
    {disk_free,322518425600},
    {file_descriptors,
    [{total_limit,51100},
    {total_used,2},
    {sockets_limit,45988},
    {sockets_used,0}]},
    {processes,[{limit,1048576},{used,253}]},
    {run_queue,1},
    {uptime,128},
    {kernel,{net_ticktime,60}}]

    启动服务: ./rabbitmq-server &

    查看服务状态:./rabbitmqctl status

    关闭服务:./rabbitmqctl stop

    启动管理 ./rabbitmq-plugins enable rabbitmq_management

    查看mq用户:./rabbitmqctl list_users

    查看用户权限:./rabbitmqctl list_user_permissions guest

    新增用户: ./rabbitmqctl add_user admin 123456
    ./rabbitmqctl add_user admin tEneYxJm
    ./rabbitmqctl add_user yjsworker 7G2hMuXf

    设为管理员
    ./rabbitmqctl set_user_tags admin administrator

    编辑配置文件

    cd /opt/rabbitmq/etc/rabbitmq
    wget https://raw.githubusercontent.com/rabbitmq/rabbitmq-server/master/docs/rabbitmq.conf.example
    cp rabbitmq.conf.example rabbitmq.conf

    vi rabbitmq.conf
    listeners.tcp.local = 192.168.0.37:5672
    management.tcp.port = 15672
    management.tcp.ip = 192.168.0.37

    management.http_log_dir = /var/log/nginx/access.log

    management.tcp.port = 15672
    management.tcp.ip = 192.168.0.37

    五.开机启动

    vi /etc/rc.local /opt/rabbitmq/sbin/rabbitmq-server &

    六.iptables


    iptables -A INPUT -s 192.168.0.0/24 -p tcp -m tcp –dport 5672 -j ACCEPT
    iptables -A INPUT -s 192.168.0.40/32 -p tcp -m tcp –dport 15672 -j ACCEPT
    /etc/init.d/iptables save

    七.nginx配置

    vi /opt/nginx/conf/nginx.conf

    server
    {
    listen 80;
    server_name admin.c1gstudio.com;
    index index.html index.htm index.php;
    root /opt/htdocs/www;

        include manageip.conf;
        deny    all;
    
         location /rabbit/ {
          proxy_pass        http://192.168.0.37:15672/;
          proxy_set_header  Host        $host;
          proxy_set_header  X-Real-IP   $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }            
    
         location / {
          proxy_pass        http://192.168.0.37:80/;
          proxy_set_header  Host        $host;
          proxy_set_header  X-Real-IP   $remote_addr;
          proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
          #proxy_set_header X-Forwarded-For $remote_addr;
          proxy_redirect    off;
         }            
    
             access_log  /opt/nginx/logs/access.log  access;
     }

    八.测试

    打开send.php文件:

    <?php

    require_once DIR . ‘/vendor/autoload.php’;

    use PhpAmqpLib\Connection\AMQPStreamConnection;
    use PhpAmqpLib\Message\AMQPMessage;

    // RabbitMQ 默认端口5672, 默认账号密码: guest / guest
    // $host = ‘localhost’;
    $host = ‘192.168.99.100’;
    $port = ‘5672’;
    $username = ‘guest’;
    $password = ‘guest’;

    // $connection = new AMQPStreamConnection(‘localhost’, 5672, ‘guest’, ‘guest’);
    $connection = new AMQPStreamConnection($host, $port, $username, $password);
    $channel = $connection->channel();
    $channel->queue_declare(‘hello’, false, false, false, false);

    $msg = new AMQPMessage(‘Hello World!’);
    $channel->basic_publish($msg, ”, ‘hello’);
    echo ” [x] Sent ‘Hello World!’\n”;

    $channel->close();
    $connection->close();

    打开 receive.php 文件:

    <?php
    // file: receive.php
    require_once DIR . ‘/vendor/autoload.php’;
    use PhpAmqpLib\Connection\AMQPStreamConnection;

    // RabbitMQ 默认端口5672, 默认账号密码: guest / guest
    // $host = ‘localhost’;
    // $host = ‘5672’;
    $host = ‘192.168.99.100’;
    $port = ‘5672’;
    $username = ‘guest’;
    $password = ‘guest’;

    $connection = new AMQPStreamConnection($host, $port, $username, $password);
    $channel = $connection->channel();

    $queueName = ‘hello-test’;
    $channel->queue_declare($queueName, false, false, false, false);

    echo ‘ [*] Waiting for messages. To exit press CTRL+C’, “\n”;

    $callback = function($msg) {
    echo ” [x] Received: {“, $msg->body, “}\n”;
    };

    $channel->basic_consume($queueName, ”, false, true, false, false, $callback);

    while(count($channel->callbacks)) {
    $channel->wait();
    }

    发送和结束队列消息
    先执行receive.php.
    再执行send.php文件,来发送消息:

    $ php send.php
    [x] Sent: {18-02-10 02:35:15: Hello World!}
    $ php send.php
    [x] Sent: {18-02-10 02:35:34: Hello World!}

    https://docs.phpcomposer.com/01-basic-usage.htmlhttp://www.rabbitmq.com/tutorials/tutorial-one-php.html

    php-amqplib amqp-ext 性能对比

    https://blog.forma-pro.com/php-amqp-clients-benchmark-them-all-8a4e6adb1a6b

    RabbitMQ的用户角色分类:
    none、management、policymaker、monitoring、administrator

    RabbitMQ各类角色描述:
    none
    不能访问 management plugin

    management
    用户可以通过AMQP做的任何事外加:
    列出自己可以通过AMQP登入的virtual hosts
    查看自己的virtual hosts中的queues, exchanges 和 bindings
    查看和关闭自己的channels 和 connections
    查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。

    policymaker
    management可以做的任何事外加:
    查看、创建和删除自己的virtual hosts所属的policies和parameters

    monitoring
    management可以做的任何事外加:
    列出所有virtual hosts,包括他们不能登录的virtual hosts
    查看其他用户的connections和channels
    查看节点级别的数据如clustering和memory使用情况
    查看真正的关于所有virtual hosts的全局的统计信息

    administrator
    policymaker和monitoring可以做的任何事外加:
    创建和删除virtual hosts
    查看、创建和删除users
    查看创建和删除permissions
    关闭其他用户的connections

    创建用户并设置角色:
    可以创建管理员用户,负责整个MQ的运维,例如:
    $sudo rabbitmqctl add_user user_admin passwd_admin
    赋予其administrator角色:
    $sudo rabbitmqctl set_user_tags user_admin administrator

    可以创建RabbitMQ监控用户,负责整个MQ的监控,例如:
    $sudo rabbitmqctl add_user user_monitoring passwd_monitor
    赋予其monitoring角色:
    $sudo rabbitmqctl set_user_tags user_monitoring monitoring

    可以创建某个项目的专用用户,只能访问项目自己的virtual hosts
    $sudo rabbitmqctl add_user user_proj passwd_proj
    赋予其monitoring角色:
    $sudo rabbitmqctl set_user_tags user_proj management

    创建和赋角色完成后查看并确认:
    $sudo rabbitmqctl list_users

    RabbitMQ 权限控制
    默认virtual host:”/”
    默认用户:guest
    guest具有”/”上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制:
    [{rabbit, [{loopback_users, []}]}]

    用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:
    exchange和queue的declare与delete分别需要exchange和queue上的配置权限
    exchange的bind与unbind需要exchange的读写权限
    queue的bind与unbind需要queue写权限exchange的读权限
    发消息(publish)需exchange的写权限
    获取或清除(get、consume、purge)消息需queue的读权限

    对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:
    set_permissions [-p ]
    其中, 的位置分别用正则表达式来匹配特定的资源,如’^(amq.gen.*|amq.default)$’可以匹配server生成的和默认的exchange,’^$’不匹配任何资源

    需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。

    为用户赋权:
    $sudo rabbitmqctl set_permissions -p /vhost1 user_admin ‘.’ ‘.’ ‘.*’
    该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源

    按用户查看权限:

    $sudo rabbitmqctl list_user_permissions user_admin

    按服务器查看权限

    $sudo rabbitmqctl list_permissions -p /vhost1

    Fatal error: Uncaught exception ‘PhpAmqpLib\Exception\AMQPProtocolConnectionException’ with message ‘UNEXPECTED_FRAME – expected content header for class 60, got non content header frame instead’ in /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php:715 Stack trace: #0 [internal function]: PhpAmqpLib\Connection\AbstractConnection->connection_close(Object(PhpAmqpLib\Wire\AMQPReader)) #1 /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(211): call_user_func(Array, Object(PhpAmqpLib\Wire\AMQPReader)) #2 /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(369): PhpAmqpLib\Channel\AbstractChannel->dispatch(‘10,50’, ‘\x01\xF9]UNEXPECTED_F…’, NULL) #3 /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php(644): PhpAmqpLib\Channel\AbstractChannel->wait() #4 /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Chan in /opt/php-5.4.45/lib/composer/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php on line 715

    后续安装参考
    https://help.aliyun.com/document_detail/53100.html?spm=a2c4g.11186623.0.0.503b522f7G2rRn

    The post linux下安装rabbitmq及php-amqplib first appeared on C1G军火库.



沪ICP备19023445号-2号
友情链接