[喵咪MQ(2)]RabbitMQ单机模式使用

[喵咪MQ(2)]RabbitMQ单机模式使用

哈喽!本周我们又见面了,今天呢我们接着说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/devtools.html

我们以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也有一套灵活的集群解决方案,在下一节我们将来一同学习有关集群的一些支持,那么今天的博文就到这里,多谢大家的支持!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

g4e基础篇#4 了解Git存储库

Git 存储库看上去就是一个文件夹,只是在这个文件夹中不仅仅保存了所有文件的当前版本,也同时保存了所有的历史记录,这些额外的信息都保存在当前文件夹下面的.git...

24360
来自专栏编程微刊

如何在本地运行查看github上的开源项目

15060
来自专栏编程坑太多

『中级篇』Docker Cloud自动构建 Docker image(55)

PS:自动化构建的build image,是不是感觉很爽,但是这里的Dockfile这是需要基础牢靠。本节也是以后学习的基础。

18250
来自专栏24K纯开源

mac下利用Breakpad的dump文件进行调试

一、前情回顾 最近把公司的一个视频处理程序更新了一个版本,准备提交测试的发现了崩溃的情况。这个程序采用Qt和ffmpeg技术栈开发,主要用于对视频进行渲染拼接处...

73790
来自专栏Crossin的编程教室

把你开发的网站免费发布到互联网上(1)

0. 前言 之前我们写过很多代码,但几乎都是在自己的电脑上运行的。如果别人要看,也只能在电脑上演示,或者把代码发给他运行。 而在学习 web 开发,比如 Dja...

37960
来自专栏耕耘实录

CentOS7.X的系统管理、安全设置及系统优化思路

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

28020
来自专栏java一日一条

JVM 开发者必看:傻瓜式编译 OpenJDK 7

LZ经过一个星期断断续续的研究,终于成功的搞定了JDK的成功编译与调试。尽管网络上的教程也有不少,包括源码中也有自带的编译步骤说明,但真正自己动手的话,还是会遇...

10820
来自专栏PHP技术大全

grafana+prometheus快速搭建MySql监控系统实践

对于LNMP环境下的开发者来说,mysql是非常重要的一环,同时mysql的性能监控也是开发者所需要关注的一环;如果大家使用阿里云的RDS会感觉到其监控功能非常...

23430
来自专栏运维技术迷

DNS服务器4013警告信息的解决方法

今天例行维护域控,发现一直出现DNS无法启动,一直在提示4013,感觉很不可思议。对比另外一台辅助域控的设置,都没有问题。只好一步一步的来细致的检查,终于被我找...

35660
来自专栏CaiRui

http和www服务基础知识

一.http www端口: http协议www服务的默认端口是:80 加密的www服务,http默认端口:443(网银,支付的时候) 二.用户访问网站基本流程:...

22470

扫码关注云+社区

领取腾讯云代金券