1. 生产者: 在现实生活中就好比制造商品的工厂,他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。
2. 队列:rabbitMQ就像一个仓库,一个仓库里面可以 有很多队列,每个队列才是服务器之间消息通信的载体。
3.消费者:消费者就好比是从商店购买或从仓库取走商品的人,消费的意思就是接收。消费者是一个程序,主要是等待接收消息。
4.交换器:在生产者和消息队列之间的交换器,功能类似于网络宽带的交换机,可以根据不同的关键字,将信息发送到不同的队列。
MQ不能进行批量的消息处理,你看到的传输再多也只是消息被一条一条的存入队列,消费者从队列中一条一条的取出。这跟kafKa有区别,所以在效率上比不上kafKa,但是MQ主打的是稳定。
每次消费者取出消息时会通知队列,我拿到了,当队列接收到这条消息,就会把消息删除,这是默认的ACK机制。
如果在接收消息之后,消费者挂掉,或者任何情况没有返回ack,队列中这条消息将不会删除,可以一直存着,等待其他消费者来取。
注意,但是如果设置不返回ack,在不断的发送消息到队列又不删除,会导致MQ仓库 boom~~~~
以上内容参考文章:https://www.cnblogs.com/dwlsxj/p/RabbitMQ.html
RabbitMQ安装:
安装erlang的依赖:
yum -y install epel-release
yum clean all
yum makecache
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel bzip2 gtk+* mesa* freeglut*
wget https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.tar.bz2
bzip2 -d wxWidgets-3.1.2.tar.bz2
tar -xvf wxWidgets-3.1.2.tar
cd wxWidgets-3.1.2
./configure --with-opengl --enable-debug --enable-unicode
make && make install
ldconfig
下载并安装ERLANG
wget http://erlang.org/download/otp_src_22.0.tar.gz
tar -zxvf otp_src_22.0.tar.gz -C /usr/local/
cd /usr/local/otp_src_22.0/
./configure --prefix=/usr/lib/erlang --without-javac --disable-javac
make && make install
/usr/lib/erlang/bin/erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 10.4
配置环境变量
echo 'export PATH=/usr/lib/erlang/bin:$PATH' >>/etc/profile
source /etc/profile
下载rebbitmq包并安装
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.15/rabbitmq-server-generic-unix-3.7.15.tar.xz
xz -d rabbitmq-server-generic-unix-3.7.15.tar.xz
tar -xvf rabbitmq-server-generic-unix-3.7.15.tar
mv rabbitmq_server-3.7.15/ /usr/local/rabbitmq
echo 'export PATH=/usr/local/rabbitmq/sbin:$PATH'>>/etc/profile
source /etc/profile
启动rabbitmq-server
rabbitmq-server (加 -detached 为后台启动)
检查服务启动状态
netstat -lnpt|grep beam
netstat -lnpt|grep :15672
启动web管理插件
rabbitmq-plugins enable rabbitmq_management
添加远端登录账户
#添加用户 admin 密码为 123456
rabbitmqctl add_user admin 123456
#将admin 设置为管理员权限
rabbitmqctl set_user_tags admin administrator
#将admin 设置为远端登录
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
重启rabbitmq-server并测试访问
rabbitmq-server -detached
rabbitmqctl stop_app
###################################
报错:
[root@kvm2 ~]# rabbitmq-server
ERROR: epmd error for host kvm2: timeout (timed out)
解决:(添加主机名即可)
[root@kvm2 ~]# vim /etc/hosts
127.0.0.1 kvm2 localhost localhost.localdomain localhost4 localhost4.localdomain4
###################################
浏览器登录rabbitmq:
http://IP:15672
账号:admin
密码:123456
RabbitMQ节点绑定到端口(打开服务器TCP套接字)以接受客户端和CLI工具连接。其他进程和工具(如SELinux)可能会阻止RabbitMQ绑定到端口。发生这种情况时,节点将无法启动。CLI工具,客户端库和RabbitMQ节点也打开连接(客户端TCP套接字)。防火墙可以防止节点和CLI工具相互通信。
各端口解释:
4369:epmd,RabbitMQ节点和CLI工具使用的对等发现服务
5672,5671:AMQP 0-9-1和1.0客户端使用没有和使用TLS
25672:用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认情况下限于单个端口,计算为AMQP端口+ 20000)。除非确实需要这些端口上的外部连接(例如,群集使用联合或CLI工具在子网外的计算机上使用),否则不应公开这些端口。有关详情, 请参阅网络指南
35672-35682:由CLI工具(Erlang分发客户端端口)用于与节点通信,并从动态范围(计算为服务器分发端口+ 10000到服务器分发端口+ 10010)进行分配。有关详情, 请参阅网络指南
15672:HTTP API客户端,管理UI和rabbitmqadmin(仅当启用了管理插件时)
61613,61614:没有和使用TLS的STOMP客户端(仅当启用了STOMP插件时)
1883,8883 :( 如果启用了MQTT插件,则没有和使用TLS的MQTT客户端
15674:STOMP-over-WebSockets客户端(仅当启用了Web STOMP插件时)
15675:MQTT-over-WebSockets客户端(仅当启用了Web MQTT插件时)
可以将RabbitMQ配置 为使用不同的端口和特定的网络接口。
如果觉得文章不错,就动动小手点下 “好文要顶” 和 “推荐”,谢谢!!!
转载必须以超链接形式标明文章原始出处和作者信息及版权声明,谢谢合作!
QQ群:264092835 欢迎你的加入
该文章为原创,转载请注明原出处 谢谢合作