1 MQ
MQ (Message Queqe)我们可以理解为消息队列,队列我们可以理解为管道。以管道的方式做消息传递。
应用场景:
1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提醒我们,让我们稍等,以及一些友好的图片文字提醒。而不是像前几年的时代,动不动就页面卡死,报错等来呈现给用户。
在这业务场景中,我们就可以采用队列的机制来处理,因为同时结算就只能达到这么多。
2.在我们平时的超市中购物也是一样,当我们在结算的时候,并不会一窝蜂一样涌入收银台,而是排队结算。这也是队列机制。
即:一个接着一个的处理,不能插队。
参考链接:https://www.sojson.com/blog/48.html
消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。MQ主要作用是接受和转发消息。你可以想想在生活中的一种场景:当你把信件的投进邮筒,邮递员肯定最终会将信件送给收件人。我们可以把MQ比作 邮局和邮递员。
MQ和邮局的主要区别是,它不处理消息,但是,它会接受数据、存储消息数据、转发消息。
2 AMQP
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
3 RabbitMQ
1.1 简介
RabbitMQ中主要有三种关系:生产者、消费者、队列。
生产者用来发送消息,消费者用来接受消息,队列用来存储消息。
关于这三者之间的详细说明,可以看下面这个RabbitMQ教程,虽然是用C#写的,但我觉得还挺好懂的,地址如下:
http://www.cnblogs.com/PatrickLiu/tag/RabbitMQ/
Rabbitmq服务器的主要通过rabbitmqctl和rabbimq-plugins两个工具来管理,以下是一些常用功能。这里主要讲讲控制台的一些命令操作。
1.2 用户管理
$ rabbitmqctl list_users //列出所有用户
$ rabbitmqctl add_user username password //添加用户
$ rabbitmqctl change_password username newpassword //修改用户密码
$ rabbitmqctl delete_user username //删除用户
1.3 用户角色
最小权限角色 none
管理员角色 management
决策者 policymaker
监控 monitor
超级管理员 administrator
1.4 权限管理
$ rabbitmqctl list_permissions [-p vhostpath] //列出所有用户权限
$ rabbitmqctl list_user_permissions username //查看用户权限
$ rabbitmqctl set_permissions [-p vhostpath] username regexp regexp regexp //设置用户权限
//$ rabbitmqctl set_permissions -p / jqq '.*' '.*' '.*' 三个'.*'分别代表了conf权限,read权限与write权限
$ rabbitmqctl clear_permissions [-p vhostname] username //清除用户权限
1.5 常用服务命令
$ (service) rabbit-service start //启动服务
$ rabbit-service stop //关闭服务
$ rabbitmqctl list_queues //查看所有队列
$ rabbitmqctl reset //清除所有队列
$ rabbitmqctl stop_app //关闭应用
$ rabbitmqctl start_app //打开应用,配合关闭命令达到清空队列的目的
$ rabbitmqctl status //查看运行信息
$ rabbitmq-plugins enable rabbitmq_management //启动rabbitmq的图形管理界面,这个操作必须重启rabbitmq, 然后在web中 http://127.0.0.1:15672 用户名和密码都是guest guest。如果局域网无法访问设置防火墙过滤规则或关闭防火墙。
$ rabbitmq-plugins disable rabbitmq_management //关闭rabbitmq的图形管理界面