RabiitMq
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格式 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- HDU 5568:sequence2 大数+DP
- 是否有一个perl6对应的powershells get-member来“分析”一
- Perl笔记:13、智能匹配与given-whe…
- Delphi的学习笔记十七——Exception处理
- Delphi 2010 新增功能之: IOUtils 单元(7): TFile 结构的功
- [VB.NET源码]任务栏上的时间clock
- 我可以轻松地为Template Toolkit for Perl添加新指令吗?
- perl – MooseX :: Declare是否要求'{‘与’method’在
- Perl 与MySQL交互示例代码
- .net – 如何比较两个日期FORMATS以保存到DB