RabbitMQ简介
以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下单的过程中订单服务需要调用商品服务进行扣库存操作。按照传统的方式,下单过程要等到调用完毕之后才能返回下单成功,如果网络产生波动等原因使得商品服务扣库存延迟或者失败,会带来较差的用户体验,如果在高并发的场景下,这样的处理显然是不合适的,那怎么进行优化呢?这就需要消息队列登场了。
消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。
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不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。
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
wget -c http://erlang.org/download/otp_src_23.2.tar.gz
tar -xf wxWidgets-3.1.7.tar.bz2
cd /usr/bin
ln -s wx-config-3.0 wx-config
tar -xf otp_src_23.2.tar.gz
cd otp_src_23.2
./configure --prefix=/usr/local/erlang
make && make install
tar -xf rabbitmq-server-generic-unix-3.8.34.tar.xz
mv rabbitmq_server-3.8.34/ /usr/local/rabbitmq
vim /etc/profile
添加
export PATH=$PATH:/usr/local/rabbitmq/bin
rabbitmq-server start
rabbitmqctl add_user admin admin
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl status
rabbitmq-server stop
rabbitmqctl status
ps -ef|grep rabbit
rabbitmq-server -detached
rabbitmqctl list_users
rabbitmqctl set_user_tags admin administrator
rabbitmqctl list_users
rabbitmq地址
172.20.64.193:25672
172.20.64.193:15672 (web)
用户:admin
密码:admin
主要端口说明
5672 --client端通信口
15672 -- 管理界面ui端口
25672 -- server间内部通信口
访问RabbitMQ管理界面可以访问如下:
http://IP:15672/
连接RabbitMQ的话就要用client端通信口:
server: amqp://guest:guest@localhost:5672/
标签:服务,队列,rabbitmq,RabbitMQ,devel,消息
From: https://www.cnblogs.com/sddll/p/17136768.html