1、简介:
MQ: 全称是Message、Queue,消息队列,也就是消息以管道的方式进行传递。
RabbitMQ 是一种实现了AMQP(advanced message queuing protocal)高级消息队列的协议的消息队列服务,用的是Erlang语言
2、使用场景:
抢杀购物
日志的读取
发送短信、邮件
异步处理的情况
应用解耦
3、工作机制
组成:生产者、消费者、代理(RabbitMq本身)
消息发送原理:应用服务程序和Rabbit server 之间会创建一个TCP链接,一旦TCP打开,并通过认证(认证就是你试图连接Rabbit之前发送的Rabbit服务器连接
信息和用户名和密码
有点像程序连接数据库,使用Java有两种连接认证的方式),创建一条AMQP信道
信道是创建在“真实”TCP上的虚拟连接,AMQP命令都是通过信道发送出去的,
每个信道都会有一个唯一的ID,不论是发布消息,订阅队列或者介绍消息都是通过信道完成的
4、组成:
ConnectionFactory(链接管理器):应用程序和Rabbit server建立链接的管理器,程序代码中实现
Channel(信道):消息推送使用的通道
Exchange(交换器):用于接受和分配消息
Quere(队列):用于存储生产者的消息
Routingkey(路由键):用于把生产者的数据分配到交换机上
Bindingkey(绑定键):用于把交换器的消息绑定到队列上
生产者--->ConnectionFactory ---->Routingkey(路由键)---->Exchange---->Bindingkey(绑定键)---->Quere
5、持久化原理
RabbitMQ 会将你的持久化消息写入磁盘上的持久化日志文件,等消息被消费后,Rabbit会把消息标识为等待垃圾回收
缺点:写入内存性能比较低,数据量大的时候不适合
6、虚拟主机
每个Rabbit都能创建很多vhost,我们称之为虚拟主机,每个虚拟主机其实都是mini版的RabbitMQ,拥有自己的队列,交换器和绑定,拥有自己的权限机制。
7、命令
rabbitmq-server -detached 后台守护进程方式启动
rabbitmqctl status 查看rabbitmq 的安装情况
启动服务:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -detached 】
查看状态:rabbitmqctl status【 /usr/local/rabbitmq/sbin/rabbitmqctl status 】
关闭服务:rabbitmqctl stop【 /usr/local/rabbitmq/sbin/rabbitmqctl stop 】
列出角色:rabbitmqctl list_users
8、ip:15672
9、确认机制
Message acknowledgment消息确认
为了保证数据不被丢失,RabbitMQ支持消息确认机制,为了保证数据能被正确处理而不仅仅是被Consumer收到
,那么我们不能采用no-ack,而应该是在处理完数据之后发送ack.
10、消息持久化
如果exchange(交换器)和quere(队列)都是持久化的,那么他们之间的binding也是持久化的
如果exchange 和quere两者之间有一个持久化,一个非持久化,则不允许建立绑定
一旦创建了队列和交换机,就不能修改器标识了,例如,创建了一个non-durable的队列,然后想把它改变成durable的,唯一的办法就是删除这个队列然后重现创建。
11、代码的实现:
------创建exchange(交换器)
------创建quere(消息队列)
------创建binding之间的关系
------创建具体的门面封装 一个创造者 一个接受者来处理代码
通过那个交换机、那个消息队列 发送什么消息 中间的传输尽量使用json格式