rabbitmq

RabbitMQ简介
以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。

image

RabbitMQ就是这样一款我们苦苦追寻的消息队列。RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。
RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。
RabbitMQ除了像兔子一样跑的很快以外,还有这些特点:
开源、性能优秀,稳定性保障
提供可靠性消息投递模式、返回模式
与Spring AMQP完美整合,API丰富
集群模式丰富,表达式配置,HA模式,镜像队列模型
保证数据不丢失的前提做到高可靠性、可用性
MQ典型应用场景:
异步处理。把消息放入消息中间件中,等到需要的时候再去处理。
流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
日志处理
应用解耦。假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。
单机部署
下载
[root@localhost opt]# yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel java-devel unixODBC-devel *glu.h mesa-lib GLU-devel wxWidgets-devel wxBas
[root@localhost opt]# wget -c http://erlang.org/download/otp_src_23.2.tar.gz
[root@localhost opt]# wget https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.7/wxWidgets-3.1.7.tar.bz2
[root@localhost opt]# wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.8/rabbitmq-server-generic-unix-3.11.8.tar.xz
[root@localhost opt]# tar -xf wxWidgets-3.1.7.tar.bz2
[root@localhost opt]# cd wxWidgets-3.1.7
[root@localhost wxWidgets-3.1.7]# ./configure && make && make install
[root@localhost wxWidgets-3.1.7]# cd /usr/bin
[root@localhost bin]# ln -s wx-config-3.0 wx-config
[root@localhost opt]# tar -xf otp_src_23.2.tar.gz
[root@localhost opt]# cd otp_src_23.2
[root@localhost otp_src_23.2]# ./configure --prefix=/usr/local/erlang
[root@localhost otp_src_23.2]# make && make install
[root@localhost opt]# tar -xf rabbitmq-server-generic-unix-3.8.34.tar.xz
[root@localhost opt]# mv rabbitmq_server-3.8.34/ /usr/local/rabbitmq
[root@localhost opt]# vim /etc/profile
#添加
export PATH=$PATH:/usr/local/rabbitmq/bin
[root@localhost opt]# rabbitmq-server start
[root@localhost opt]# rabbitmqctl add_user admin admin
[root@localhost opt]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
[root@localhost opt]# rabbitmq-plugins enable rabbitmq_management
[root@localhost opt]# rabbitmqctl status
[root@localhost opt]# rabbitmq-server stop
[root@localhost opt]# rabbitmqctl status
[root@localhost opt]# ps -ef|grep rabbit
[root@localhost opt]# rabbitmq-server -detached
[root@localhost opt]# rabbitmqctl list_users
[root@localhost opt]# rabbitmqctl set_user_tags admin administrator
[root@localhost opt]# rabbitmqctl list_users
rabbitmq地址
192.168.1.238:25672
192.168.1.238:15672 (web)
用户:admin
密码:admin
主要端口说明
5672 --client端通信口
15672 -- 管理界面ui端口
25672 -- server间内部通信口
访问RabbitMQ管理界面可以访问如下:
http://IP:15672/
连接RabbitMQ的话就要用client端通信口:
server: amqp://guest:guest@localhost:5672/
posted @   w'dwd  阅读(30)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示