1. 消息队列
什么是消息队列 |
消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。
消息队列怎么用 |
从上面的描述中可以看出消息队列是一种应用间的异步协作机制,那什么时候需要使用 MQ 呢?
以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。
详情可阅览: https://blog.csdn.net/whoamiyang/article/details/54954780
2. win安装RabbitMQ
简介 |
RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。
rabbitMQ是一款基于AMQP协议的消息中间件,它能够在应用之间提供可靠的消息传输。在易用性,扩展性,高可用性上表现优秀。使用消息中间件利于应用之间的解耦,生产者(客户端)无需知道消费者(服务端)的存在。而且两端可以使用不同的语言编写,大大提供了灵活性。
安装Erlang |
注意:Erlang版本需要和rabbitmq版本匹配才行,对应版本查询的官方地址:https://www.rabbitmq.com/which-erlang.html
第一步:下载Erlang 推荐下载地址:Erlang管网
第二步:打开Erlang安装包:
第三步:点击next,修改安装目录,建议除C的其它盘,不要带中文字符:
第四步:点击next,是否加入到快捷方式,保持默认即可,再点击install开始安装:
安装完毕,点击Close:
第五步:新建Erlang环境变量:
修改环境变量path,增加Erlang变量至path,%ERLANG_HOME%\bin;
第六步,在cmd命令行输入erl -version, 查看版本号及是否安装配置成功
至此,erlang安装在win上结束
安装RabbitMQ |
第一步:下载RabbitMQ 推荐下载地址:RabbitMQ官网
第二步:打开rabbitmq-server安装包:
第二步:点击next,修改安装目录,再点击install,开始安装:
第三步,开启rabbitmq_managemen后台管理插件,进入到rabbitmq-server安装目录下的sbin文件夹下启动cmd命令,输入rabbitmq-plugins enable rabbitmq_management:
此处注意如果执行以下命令报错目录名称无效. 文件名,目录名或卷标语法不正确.注意本机电脑名称是否包含有中文,有中文的话修改为全英文,重启电脑再次执行以下命令即可
λ rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@WitHong:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@WitHong...
The following plugins have been enabled:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
set 3 plugins.
Offline change; changes will take effect at broker restart.
启动rabbitmq-server报错:
λ rabbitmq-server.bat
"WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: C:\Users\Admin\AppData\Roaming\RabbitMQ\advanced.config"
BOOT FAILED
===========
Error description:
init:do_boot/3 line 819
init:start_em/1 line 1111
rabbit:start_it/1 line 484
rabbit:broker_start/1 line 360
rabbit:start_loaded_apps/2 line 613
app_utils:manage_applications/6 line 126
lists:foldl/3 line 1263
rabbit:'-handle_app_error/1-fun-0-'/3 line 736
throw:{could_not_start,ra,
{ra,{{undef,
[{persistent_term,put,['$ra_logger',rabbit_log_ra_shim],[]},
{ra_sup,init,1,[{file,"src/ra_sup.erl"},{line,23}]},
{supervisor,init,1,[{file,"supervisor.erl"},{line,295}]},
{gen_server,init_it,2,
[{file,"gen_server.erl"},{line,374}]},
{gen_server,init_it,6,
[{file,"gen_server.erl"},{line,342}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,249}]}]},
{ra_app,start,[normal,[]]}}}}
Log file(s) (may contain more information):
C:/Users/Admin/AppData/Roaming/RabbitMQ/log/rabbit@WitHong.log
C:/Users/Admin/AppData/Roaming/RabbitMQ/log/rabbit@WitHong_upgrade.log
{"init terminating in do_boot",{could_not_start,ra,{ra,{{undef,[{persistent_term,put,['$ra_logger',rabbit_log_ra_shim],[]},{ra_sup,init,1,[{file,"src/ra_sup.erl"},{line,23}]},{supervisor,init,1,[{file,"supervisor.erl"},{line,295}]},{gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,249}]}]},{ra_app,start,[normal,[]]}}}}}
init terminating in do_boot ({could_not_start,ra,{ra,{{undef,[_]},{ra_app,start,[_]}}}})
Crash dump is being written to: C:\Users\Admin\AppData\Roaming\RabbitMQ\log\erl_crash.dump...done
查找原因后,发现Erlang版本需要和rabbitmq版本匹配才行,对应版本查询的官方地址:https://www.rabbitmq.com/which-erlang.html
卸载低版本的Erlang,重新下载高版本的Erlang,重复之前的过程再安装一遍,再次启动rabbitmq-server:
λ rabbitmq--server.bat
"WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: C:\Users\Admin\AppData\Roaming\RabbitMQ\advanced.config"
## ## RabbitMQ 3.8.3
## ##
########## Copyright (c) 2007-2020 Pivotal Software, Inc.
###### ##
########## Licensed under the MPL 1.1. Website: https://rabbitmq.com
Doc guides: https://rabbitmq.com/documentation.html
Support: https://rabbitmq.com/contact.html
Tutorials: https://rabbitmq.com/getstarted.html
Monitoring: https://rabbitmq.com/monitoring.html
Logs: C:/Users/Admin/AppData/Roaming/RabbitMQ/log/rabbit@WitHong.log
C:/Users/Admin/AppData/Roaming/RabbitMQ/log/rabbit@WitHong_upgrade.log
Config file(s): c:/Users/Admin/AppData/Roaming/RabbitMQ/advanced.config
Starting broker... completed with 3 plugins.
启动成功。
默认UserName:guest Password:guest
3. Linux安装RabbitMQ
安装配置epel源
$ yum -y install epel-release
rabbitmq安装之前需要安装socat,否则直接安装rabbitmq可能会报错
$yum install socat
安装erlang
$ yum -y install erlang
安装RabbitMQ
$ yum -y install rabbitmq-server
注意:service rabbitmq-server start/stop
常用命令:
#启动/停止RabbitMQ服务
service rabbitmq-server start/stop
#状态查看
rabbitmqctl status
#启用插件
rabbitmq-plugins enable rabbitmq_management
#重启服务
service rabbitmq-server restart
#添加帐号:name 密码:passwd
rabbitmqctl add_user name passwd
#赋予其administrator角色
rabbitmqctl set_user_tags name administrator
#设置权限
rabbitmqctl set_permissions -p / name ".*" ".*" ".*"
# 查看所有用户
rabbitmqctl list_users
# 查看用户权限
rabbitmqctl list_user_permissions name
删除用户(安全起见,删除默认用户)
rabbitmqctl delete_user guest
rabbit默认的web端口号是15672
注意放通外网访问,我的是阿里云服务器,需要配置安全组策略,增加外部访问策略放通TCP:15672