问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

rabb.it有哪些用户值得关注

发布网友 发布时间:2022-04-19 12:52

我来回答

1个回答

热心网友 时间:2022-04-07 12:59

关于RabbitMQ的文章网上转来转去最多的是一篇<<[RabbitMQ+Python入门经典] 兔子和兔子窝>>(随便给个链接了).这篇文章的讲解是很风趣,很适合用来理解一些基础概念.理解了概念以后就要进行一些实际性的实验了.原文给的python的例子.不是笔者想要的,笔者要用php的.

关于php和rabbitmq网上又有一篇被转来转去的文章<<安装 php-rabbit: RabbitMQ 的 PHP 扩展>>.文章里提到的php-rabbit,笔者死活是访问不了:

让几个不同地方的哥们帮着访问下载,都下载不了,推断可能是这个项目被删除了.问一个哥们儿,说他们那用的是php-amqp.从官方下的库竟然不好使.于是死皮懒脸的管哥们要了他们正在用的版本和示例,又鉴于网上 php-amqp版本的rabbit操作细节甚少(可以说没有么?),于是有了今天这份儿总结.
测试平台:
Distributor ID:Ubuntu
Description:Ubuntu 9.10
Release:9.10
Codename:karmic

既然是ubuntu,安装rabbitmq服务端是很easy的事情,一条命令搞定:
apt-get install rabbitmq-server

接下来的就是折腾了将近两天的心得体会了.

1.必需掌握的指令
添加用户:
rabbitmqctl add_user rainbird password
添加权限:
rabbitmqctl set_permissions -p "/" rainbird ".*" ".*" ".*"
删除测试用户:
rabbitmqctl delete_user guest

所有指令列表(很简单的英文):
add_user <UserName> <Password>
delete_user <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost <VHostPath>
delete_vhost <VHostPath>
list_vhosts
set_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions [-p <VHostPath>]
list_user_permissions <UserName>
list_queues [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]
2.vhost / 不能删除

删除/以后,新建立的vhost不能正常使用(即便不删除/,新建立的vhost也是不能正常使用).不知道为什么,有待研究.

3.关于持久化

示例里没有一点儿和持久化相关的东东,而这却是笔者最关心的,想想作为消息服务器如果不能保证消息一定被接收到,算什么事儿啊?比着网上狂转的python版本从php-amqp的库里一点一点儿翻,找到了如下持久化的设置:

接收端声明队列和交换机自动建立:
$ch->queue_declare($_QUEUE,false,true,false,false);
第三个参数设置true保证服务器重启后,自动建立队列
第五个参数设置成false防止接收端没连接的时候丢失消息
$ch->exchange_declare($EXCHANGE, 'direct', false, true, false);
第四个参数设置true保证重启后,自动建立交换机
第五个参数设置false防止接收端断开后,交换机被删除

发布端声明消息持久:
$message = new AMQPMessage(serialize($object), array('content_type' => 'text/plain', 'delivery_mode' => 2));

同时满足了上面三个条件,就可以保证未接收的消息在服务器意外重启以后依然存在了.

4.持久化的后遗症

比如说你初始化了一个队列msgs.你会发现它真的持久了!每次服务器端重启后,通过list_queues命令查看的时候都存在.但是时间久了,这个msgs我们并不需要了,怎么办呢?笔者发现,想清除这个队列只能删除它所在的vhost,然后再重建vhost,再设置vhost的权限.
rabbitmqctl delete_vhost /
rabbitmqctl add_vhost /
rabbitmqctl set_permissions -p / rainbird '.*' '.*' '.*'

要注意,如果这个操作过程中有接收端处于连接状态它们不会自动断开,但也不会再收到消息,需要手动重新连接一下.

5.关于修改监听ip和监听端口

出于一些需要,比如我们有多个ip,我们希望rabbitmq仅运行在指定的ip上.或者考虑到安全问题,我们希望修改一下rabbitmq的监听端口.默认安装完成以后,在/etc下面会有一个rabbitmq的空目录,这时候我们需要手工创建rabbitmq.conf,并写入相关内容.
vi /etc/rabbitmq/rabbitmq.conf
RABBITMQ_NODE_IP_ADDRESS=0.0.0.0
RABBITMQ_NODE_PORT=2222

保存以后重启服务就生效了.

这个东东网上又没介绍,翻了半天+无限尝试才搞出来.

6.关于运行接收端cpu100%问题

第一眼看到接收端会运行一个while等待消息的时候,笔者就知道这个进程肯定cpu占用会100%.在代码里几处while尝试添加usleep无效后,笔者最后还是在官方的问题列表里找到了答案:
vi +286 amqp_wire.inc
293while ($read < $n && (false !== ($buf = fread($this->sock, $n - $read))))
294 {
295 usleep(50000);
296 $read += strlen($buf);
297 $res .= $buf;
298 }

笔者的出发点是对的,只是没找对while.可能有人会奇怪为什么要用usleep(50000)呢?实际上笔者有遇到运行php起来的daemon导致cpu100%的情况.当时笔者加的是usleep(500000)也就是半秒钟.这样就可以使进程看上去cpu占用为0.没想到再降一个数量级也是可以正常的,这次算赚到了.

7.学到了error_log函数

以前有见过这个函数,以为是向系统日志里写log的时候才用得到呢,没想到还可以像下面这样用:
function debug_msg($s)
{
//error_log($s);
}

在不同的地方写上debug_msg,最后不用的时候时候,直接注释掉error_log,不错的小技巧!

暂时就摸索出来这么多东西了,准备拿几个不重要的任务跑跑稳定性试试.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 一个rabbitmq可以建立多少虚拟主机 rabbitmq和kafka的区别 spring boot怎样向rabbitmq 中插入对象 C# RabbitMQ中接收到的消息传出来? 404 Not Found 如何优雅的使用RabbitMQ 爱奇艺字幕广告怎么去除 Steam有客服电话吗? steam客服电话是多少 如何联系steam人工客服? steam客服怎么联系 求steam客服电话!! steam有中文客服吗 steam客服电话 中国steam客服电话是多少 为什么中国人不愿意在steam上买正版 有一段来自steam客服的回答,需要熟悉外国游戏的朋友帮助 如何联系steam人工客服 steam为什么购买时中国香港一直切换 steam 在中国有客服吗 celery python 好用吗 RabbitMQ的c++ API有哪些 请教python与java之间rpc通信,rabbitmq相关 学习Java的最佳路线 请推荐java消息队列 被关在家里,想起马上可能失业,想在网上趁机会学学java,有没有高手给推荐家靠谱的线上直播课? 消息队列的使用场景是怎样的 中断发送消息队列时,队列满了,中断信息丢失怎么解决 涂甲油胶有什么技巧吗为什么老涂不好 初学美甲怎么才能把甲油胶涂均匀 杜尔氏甲油胶好用吗?可以保持多久不掉? 甲油胶怎样涂抹均匀 涂“甲油胶”有什么技巧吗? 朋友推荐了Oulac甲油胶,这个的甲油胶好用吗? 有什么的甲油胶品牌推荐吗? 指甲油和甲油胶哪个好? 甲油胶可以直接涂吗 底胶和封层必须使用吗? 甲油胶怎么使用? 涂指甲油好?还是甲油胶好? 哪个品牌的甲油胶好用?