首页
网站导航
关于
Search
1
解决Typecho Joe主题访问fastly.jsdelivr.net速度慢的方案 | 快速优化技巧
2,190 阅读
2
解决WSL2内存不释放问题的最佳指南
1,401 阅读
3
如何在 Typecho Joe 主题的文章中增加目录
1,170 阅读
4
GO语言环境的搭建教程 - 完全指南
1,004 阅读
5
如何解决Win11电脑桌面上方显示横线问题 | 窗口11教程
1,004 阅读
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
登录
Search
标签搜索
重要
go基础
git 命令
go包
phpstorm
sublime
thinkphp6
mysql问题
软件分享
redis命令
php基础
thinkphp3.2
php第三扩展包
小蚯蚓博客
累计撰写
333
篇文章
累计收到
48
条评论
首页
栏目
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
页面
网站导航
关于
搜索到
3
篇与
的结果
2022-08-20
Rabbit MQ 高级特性详解 - 深入了解并掌握Rabbit MQ的高级功能
ack 应答机制 ack就是生产者,通过设置回调函数,当rabbitmq接收到消息后,会执行这个回调函数,这样生产者就知道消息已经被接收到了。 保证消息100%投递成功 方案一 首先建立一张表,当推送消息的时候,先把消息插入表,并且状态设置为0,当rabbitmq接收到消息后,在生产者的回调函数里将这条消息状态设置为1。同时,有一个定时任务,每隔一段时间,将状态为0的消息再推送一遍即可。这样就可以保证所有消息都会被发送。 但是,由于对数据插入消息;而且这种模式,生产者需要回调。这两步操作都是在生产者端完成的,都会消耗生产者的性能。对于生产者而言,一般都是针对用户的,我们希望做的事情越少越好,以提高对用户的响应时间。 方案二 首先建立一张表,推送消息的时候,先把消息插入表A,当rabbitmq收到消息后,在消费者里,可以把结果插入表B。同时,可以通过定时任务进行比较这两张表,把表A中存在,但是表B中不存在的消息再推送一遍即可。 冥等性 在业务高峰期,容易产生消息重复消费的情况,当消费者消费完消息后,再给生产者返回ack后,由于网络中断,导致生产者还以为没有消费数据,重新推送了消息。又或者用户可能快速点击两下,发送了两条一样的消息。而con-冥等性就是保证消息不会被多次消费。 解决办法有很多,比如用mysql的唯一键对消息进行约束。 return机制 往rabbitmq里发送消息,如果交换机存在,路由键不存在,php不会报任何的错误,所以如果失败了我们就不知道失败的原因是什么。这个时候生产者需要有个return监听器,类似ack机制里的回调函数,这个函数里就知道返回状态。 限流机制 为何要限流:生产者突然往rabbitmq发送上万条消息,单个客户端突然处理这么多消息会导致服务器的负载较大,默认情况下会一次性发送很多消息。 消费者限流api设置:$channel->basic_qos();,可以限制一次性只处理多少条数据,等这些处理完成之后,再发送指定数量的消息过来处理。那么rabbitmq如何知道这些消息已经处理完成了呢,可以通过以下代码来告诉rabbitmq: // 如果没有执行这个的话,rabbitmq就不知道,就不会继续发送消息 $message->delivery_info['channel']->basic_ack([]); 需要注意的是,要把自动确认关闭掉,这样才能用上面的手工确认。 重回队列 有时候消费者拿到消息后,执行的时候会出问题,这个时候会有个容错机制,将消息重新再发送给rabbitmq,希望再下一次拿到消息的时候能够执行成功。 $message->nack(true); TTL 代表消息再队列里可以存在的时间,超过时间后,消息就消失了。 // 设置10秒 $args->set('x-message-ttl',10000); 死信队列 比如消息设置ttl,到期后消息消失了,但是我们有时候还是想要知道原来的消息的内容是什么,死信队列就好比回收站,我们可以设置一个死信队列存放这类消息,可以让消失的消息放到死新队列里。 当队列达到最大长度的时候,我们也可以设置死信队列,将消息放到这里。 $args->set('x-dead-letter-exchange','exchange.dlx'); $args->set('x-dead-routing-key','routingkey'); ...
2022年08月20日
293 阅读
1 评论
0 点赞
2022-08-16
最全面的RabbitMQ在CentOS7上的安装教程
安装erlang 由于rabbitmq是基于erlang语言开发的,所以必须先安装erlang。 首先安装erlang的依赖: yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel 然后打开erlang官网的下载页面https://www.erlang.org/downloads,获取下载地址 下载源码到合适的位置: wget https://github.com/erlang/otp/releases/download/OTP-25.0.3/otp_src_25.0.3.tar.gz 最后就是常规的,解压编译安装: tar -zxvf otp_src_25.0.3.tar.gz mv otp_src_25.0.3 /usr/local/ cd /usr/local/otp_src_25.0.3/ mkdir ../erlang ./configure --prefix=/usr/local/erlang configure的时候如果遇到这个错 你就先不管,好像没啥影响 然后安装配置就好了 # 安装 make install # 查看一下是否安装成功 ll /usr/local/erlang/bin # 添加环境变量 echo 'export PATH=$PATH:/usr/local/erlang/bin' >> /etc/profile # 刷新环境变量 source /etc/profile 校验是否安装成功输入erl命令即可,然后在里面输入halt().命令退出来 erl RabbitMQ 安装 首先去github上的下载对应的安装包https://github.com/rabbitmq/rabbitmq-server/releases wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.10.7/rabbitmq-server-generic-unix-3.10.7.tar.xz 由于是tar.xz格式的所以需要用到xz,没有的话就先安装 yum install -y xz 然后进行两次解压,第一次是 # 执行完成之后,文件后缀会变成tar格式的 /bin/xz -d rabbitmq-server-generic-unix-3.10.7.tar.xz 第二次解压 tar -xvf rabbitmq-server-generic-unix-3.10.7.tar 然后进行安装 mv rabbitmq_server-3.7.15/ /usr/local/ mv /usr/local/rabbitmq_server-3.7.15 rabbitmq echo 'export PATH=$PATH:/usr/local/rabbitmq/sbin' >> /etc/profile source /etc/profile 至此,rabbitmq已经安装完成了 基本管理 # 启动 rabbitmq-server -detached # 停止 rabbitmqctl stop # 状态 abbitmqctl status web管理 开启web插件 rabbitmq-plugins enable rabbitmq_management 访问:http://自己的ip地址:15672/ 默认账号密码:guest guest(这个账号只允许本机访问),如果要远程访问的话,需要创建一个新的账号 # 添加一个用户 rabbitmqctl add_user silverwq 123456 # 配置权限 rabbitmqctl set_permissions -p "/" silverwq ".*" ".*" ".*" # 查看用户权限 rabbitmqctl list_user_permissions silverwq # 设置tag rabbitmqctl set_user_tags silverwq administrator # 查看所有用户 rabbitmqctl list_users # 删除用户(安全起见,删除默认用户) rabbitmqctl delete_user guest 然后就可以用silverwq/123456,进行登录了。
2022年08月16日
891 阅读
0 评论
0 点赞
2022-08-14
MQ (消息队列)详细介绍
什么是mq MQ(message queue),从字面意思上看,本质是个队列, FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中, MQ 是一种非常常见的上下游“逻辑解耦+物理解耦” 的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。 为什么要使用mq 会话中间件 消息队列经常作为分布式系统的消息中间件,例如php生产消息,java服务器消耗消息 异步操作 用多进程异步操作,去掉单进程同步操作。例如下单的时候,可以先把一些工作项推送消息队列,让其它进程去异步的处理。 队列操作 因为是队列的形式,消费者是一条条的读取消息,服务器不会超负载。
2022年08月14日
401 阅读
0 评论
0 点赞