1. 云栖社区>
  2. 博客列表>
  3. 正文

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

喵了个咪_ 2017-03-18 10:52:13 浏览696 评论0

http web 集群 持续交付 MQ 插件

摘要: 哈喽!本周我们又见面了,今天呢我们接着说MQ软件RabbitMQ的故事,在上小节以及成功的安装了RabbitMQ也配置了开机启动,那么我们应该要开始的真正的接触并且使用它来管理使用解决业务问题,请紧张的往下看…

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

w-blog博客

哈喽!本周我们又见面了,今天呢我们接着说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也有一套灵活的集群解决方案,在下一节我们将来一同学习有关集群的一些支持,那么今天的博文就到这里,多谢大家的支持!

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

版权声明:本文内容由互联网用户自发贡献,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】数据库技术天团集体亮相,分享一线生产实践经验,告诉你踩过的坑、走过的路,都是老司机,靠谱!干货分享,不可错过!  详情请点击

网友评论

关注
喵了个咪_
后端程序员,开源PHP框架PhalApi核心开...
88篇文章|31关注
消息队列(Message Queue,简称MQ)是阿里云商用的专业消息中间件,是企业级互联网架构的核心产品,基于... 更多>

基于云安全大数据能力实现,通过防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源... 更多>

以阿里云成熟的商业化云服务为基础,为游戏开发者、运营企业提供专属集群、尊享VIP服务、专项扶持基金、及多场景多类... 更多>

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本... 更多>
2017杭州云栖大会火热抢票

2017杭州云栖大会火热抢票