CentOS7下安装RabbitMQ3.7.9

xiaoyatouvsanan 2018-11-20

1.首先安装Erlang

 [1] 安装依赖组件

yum install epel-release
yum install unixODBC unixODBC-devel wxBase wxGTK SDL wxGTK-gl

 [2] 可能会出现如下错误erlang >= 19.3 被 rabbitmq-server-3.7.9-1.el7.noarch,通过下面步骤解决

 [3] 设置RabbitMQ的依赖源, 编辑/etc/yum.repos.d/rabbitmq-erlang.repo输入以下内容:

[rabbitmq-erlang]
 name=rabbitmq-erlang
 baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
 gpgcheck=1
 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
 repo_gpgcheck=0
 enabled=1

 2. 下载RabbitMQ的安装包

# yum clean all
 # yum makecache
 # wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm

 3. yum install rabbitmq-server-3.7.9-1.el7.noarch.rpm

4. 出现的问题

  [1] 问题1

Transaction check error:
  file /usr/bin/epmd from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64
  file /usr/bin/erl from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64
  file /usr/bin/erlc from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64
  file /usr/bin/escript from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64
  file /usr/bin/run_erl from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64
  file /usr/bin/to_erl from install of erlang-20.3.8.10-1.el7.centos.x86_64 conflicts with file from package esl-erlang-21.1.1-1.x86_64:

 解决:卸载冲突的组件

yum remove esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64 esl-erlang-21.1.1-1.x86_64

 解决参考网址:https://blog.csdn.net/huijiangu4621/article/details/83619707

5. RabbitMQ 管理

[1] 启动RabbitMQ
 # rabbitmq-server start
 # rabbitmqctl stop
 
 [2] 用户管理
 # rabbitmqctl add_user admin admim
 # rabbitmqctl delete_user admin
 # rabbitmqctl list_users
 # rabbitmqctrl change_password admin admin123
 
 [3] 权限管理
 # rabbitmqctl set_permissions -p  / admin  ".*"  ".*" ".*"
 # rabbitmqctl list_permissions -p /
 # rabbitmqctl clear_permissions -p / admin
 
 说明:
 -p /:代表 set_permissions 控制条目应该用到哪个 vhosts 上;
 admin:代表被授权的用户名字;
 ".*" ".*"  ".*":分别代表配置、读和写权限,而其中的 ".*" 为正则表达式,代表匹配所有权限;
 
 [4] 角色管理 
 # rabbitmqctl set_user_tags admin administrator
 # rabbitmqctl list_users
 
 说明:
 为用户添加权限,已经基本可以满足我们的需求了,但有时,我们可以使用系统预置的角色,为用户赋予角色,那么该用户也就拥有了该角色所赋予的所有权限了,在 RabbitMQ 中,角色大致分为超级管理员、监控者、策略制定者、普通管理者以及其他,它们的区别是什么?

 (1) 超级管理员(administrator)
 可登陆管理控制台(启用managementplugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

 (2) 监控者(monitoring)
 可登陆管理控制台(启用managementplugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

 (3) 策略制定者(policymaker)
 可登陆管理控制台(启用managementplugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。

 (4) 普通管理者(management)
 仅可登陆管理控制台(启用managementplugin的情况下),无法看到节点信息,也无法对策略进行管理。
 
 [5] 启用/禁用Web控制台
 # rabbitmq-plugins enable/disabled rabbitmq_management

[6] PHP 与 RabbitMQ 基础操作

(1) 在项目根目录创建 composer.json 文件。内容如下:
 {
    "require": {
        "php-amqplib/php-amqplib": ">=2.6.1"
    }
 }

 (2) $ composer install
 (3) 然后新建send.php发送消息内容如下:
	<?php
	require_once __DIR__ . '/vendor/autoload.php';
	use PhpAmqpLib\Connection\AMQPStreamConnection;
	use PhpAmqpLib\Message\AMQPMessage;

	// [1] 创建 RabbitMQ 连接
	$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
	// [2] 打开一个通道。
	$channel    = $connection->channel();
	// [3] 定义一个队列。
	$channel->queue_declare('hello', false, false, false, false);
	// [4] 创建一条字符串消息对象。
	$msg = new AMQPMessage('Hello World!');
	// [5] 向队列当中推送一条消息。
	$channel->basic_publish($msg, '', 'hello');

	echo " [x] Sent 'Hello World!'\n";
	// [6] 关闭通道。
	$channel->close();
	// [7] 关闭连接。
	$connection->close();

 (4) 接收队列消息并消费
	require_once __DIR__ . '/vendor/autoload.php';
	use PhpAmqpLib\Connection\AMQPStreamConnection;

	// [1] 创建 RabbitMQ 连接。
	$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
	// [2] 打开一个通道。
	$channel = $connection->channel();
	// [3] 定义一个队列。
	$channel->queue_declare('hello', false, false, false, false);

	echo ' [*] Waiting for messages. To exit press CTRL+C', "\n";

	// [4] 定义一个匿名方法处理接收到的消息。
	$callback = function($msg) {
		echo " [x] Received ", $msg->body, "\n";
	};
	// [5] 设置接收到的消息由谁来消息。
	$channel->basic_consume('hello', '', false, true, false, false, $callback);
	// [6] 循环等待接收队列的消息。
	while(count($channel->callbacks)) {
		$channel->wait();
	}
	
 (5) 启动脚本
 #php receive.php
 #php php send.php

 参考网址: https://www.jianshu.com/p/3528eb0481c8

相关推荐