哈喽!本周我们又见面了,今天呢我们接着说MQ软件RabbitMQ的故事,在上小节以及成功的安装了RabbitMQ也配置了开机启动,那么我们应该要开始的真正的接触并且使用它来管理使用解决业务问题,请紧张的往下看…
附上:
喵了个咪的博客:w-blog.cn
RabbitMQ官网 :http://www.rabbitmq.com/
1.用户权限体系
在RabbitMQ中提供了一套账户体系,账户体系围绕着vhost进行展开,那么vhost是什么东西,一个比较相近的意思就是虚拟空间或命名空间,每个用户都可以分配一个vhost或多个vhost的操作权限,只有拥有了操作权限这个用户才能管理这个vhost,在不同的vhost里面队列名称可以重复,所以vhost可以用来区分开发测试环境,也就是说只要部署一套rabbitMQ就可以适用多个环境
接下来我们创建一个管理员账户让我们可以进行后续的web界面管理时用户登录,以及使用队列时的用户
#admin为新建的用户,123456为密码
rabbitmqctl add_user admin 123456
#将用户设置为管理员角色(管理员角色才能管理用户哦)
rabbitmqctl set_user_tags admin administrator
2. 后台管理界面
rabbitMQ提供一套功能全面的管理后台程序,我们需要开启web服务即可通过http://主机IP:15672 进行访问(建立防火墙进行拦截,通过nginx限定IP访问)
rabbitmq-plugins enable rabbitmq_management #启用web插件
rabbitmq-plugins disable rabbitmq_management #关闭web插件
通过管理员登录就可以看到如下界面了
用户管理可以看到现在的用户列表,以及各个用户可以操作的vhost
点击一个用户可以控制权限分配新的vhost
Vhost 可以在用户下面的菜单进行创建
3.使用队列
当我们单机模式准备工作完成后就可以开始使用RabbitMQ了,当然我们需要使用一门语言来开发并且需要用上SDK,RabbitMq官方提供了各类语言的扩展:http://www.rabbitmq.com/devto...
我们以php-amqplib为例子,使用composer进行安装
require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
$config = array(
'host' => "localhost",
'port' => "5672",
'user' => "admin",
'password' => "123456",
'vhost' => "/"
);
// 链接RabbitMQ
$connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['password'], $config['vhost']);
// 建立通道
$channel = $this->connection->channel();
// 声明操作的队列,不存在会去创建 如果写入一个不存在的队列会丢失结果(此操作耗时严重谨慎使用)
$this->channel->queue_declare("test_queue", false, true, false, false);
// 消息转换 有持续交付 和 非持续交付两种
$message = new AMQPMessage("", array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));
// 写入一条消息进入队列
$channel->basic_publish($message, '', "test_queue");
// 读取消息处理 指定需要操作的队列以及处理方法
$channel->basic_qos(null, 1, null);
$channel->basic_consume("test_queue", '', false, false, false, false, function ($msg) {
$data = $msg->body;
echo $data;
// 告知消息已经处理完成,只有告知消息处理成功这条消息才算被消费
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
});
// 循环处理
while (count($this->channel->callbacks)) {
$this->channel->wait();
}
4 总结
本小节介绍了在单机场景下用户的配置,web管理界面的使用,以及怎么使用RabbitMQ来写入消息消费消息,但是在我们面前还有一个比较重要的问题,如果RabbitMQ不幸宕机了怎么办呢?业务不就不能正常使用下去了吗?不用担心RabbitMQ也有一套灵活的集群解决方案,在下一节我们将来一同学习有关集群的一些支持,那么今天的博文就到这里,多谢大家的支持!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!