美文网首页
Rabbit学习--初入RabbitMQ

Rabbit学习--初入RabbitMQ

作者: 何何与呵呵呵 | 来源:发表于2019-08-05 09:04 被阅读0次
AMQP协议

支持一对多和一对一的通信.IM协议只能一对一的通信.

生产者与消费者
  • 生产者创建消息
    信息包含两部分,有效载荷(传输的内容)和标签(确认谁接受改消息内容).


    消息流
  • 消费者接收消息
    消费者连接到代理服务器,订阅队列queue(具名邮箱)上,每当有消息到达,rabbit将消息发送给订阅/监听的消费者.消费者只能获取到有效载荷,并不知道是谁发送给它的.
  • 信道(channel)
    解决频繁的创建TCP连接造成的性能瓶颈问题


    信道
队列

AMQP的消息路由分为:交换器,队列和绑定三部分.生产者把消息发布到交换器上,消息最终到达队列,并被消费者接受.绑定决定了消息如何从路由器路由到特定的队列.


AMQP栈
  • 两种方式从队列中获取消息
    1.通过AMQP的basic.consume命令订阅.(持续消费)
    2.AMQP的basic.get命令(获取单条信息)
  • 消费者确认消息的两种方式
    1.通过AMQP的basic.ack命令
    2.订阅队列的时候将auto_ack设置为true
    注:如果应用程序有bug而忘记确认消息,rabbit将不会给该消费者发送更多消息.
  • 如何拒绝而不是确认
    1.将消费者从rabbit服务器上断开
    2.AMQP的basic.reject.如果将reject的requeue参数设置为true的话,rabbit会将消息分发给下一个订阅者,或者会将消息从队列中移除.
交换器和绑定

四中交换器:direct,fanout,topic,headers(基本不用了)

  • direct
    如果路由键匹配的话,消息就会被投递到对应的队列.


    direct交换器信息流
  • fanout
    将消息投递到所有附加在此交换器的队列上


    fanout交换器消息流
  • topic
    不同源头的消息到达同一个源头


    topic交换器消息流
多租户模式:虚拟主机和隔离
  • 好处
    既能将众多用户隔离开来,又可以避免队列和交换器的命名冲突,便于迁移.
  • 创建
    通过RabbitMQ安装路径下的./sbin/目录中的rabbitmqctl工具创建.
rabbitmqctl add_vhost[vhost_name]  -- 创建vhost
rabbitmqctl delete_vhost[vhost_name]  -- 删除vhost
rabbitmqctl list_vhosts  -- 查询运行的vhost
持久化

默认情况下,重启rabbit服务器队列和交换器都消息.将默认属性durable改为true就不需要重新创建队列和交换器了.
消息持久化条件:

  • 投递模式选项置为2(持久)
  • 发送到持久化的交换器
  • 到达持久化的队列
    这样就可以写入到磁盘上的一个持久化日志文件.当一条消息消费了,RabbitMQ会把这条日志标志为待垃圾回收.
  • 权衡取舍
    持久化会影响消息的处理量.如果要单台RabbitMQ每秒处理100000条信息并持久化,就需要选用其他的方式来处理.
事务

填补消息提交到磁盘最后的差距.

  • 问题
    降低2-10倍的消息吞吐量,而且会使生产者程序产生同步.
confirm模式

所有的信道发布的消息都会指派唯一的ID号(从1开始).


发布者确认消息ID

相关文章

网友评论

      本文标题:Rabbit学习--初入RabbitMQ

      本文链接:https://www.haomeiwen.com/subject/htywlctx.html