rabbitmq 笔记

  • basic.comsume会订阅消息并不断收取消息。直到取消订阅为止。
  • basic.get会获取单条消息,不能把basic.get放在一个循环里来替代basic.comsume,这样会影响性能。
  • 当队列有多个消费之时,队列将以 round-robin的方式发送给消费者。每条消息值发送给一个消费者。
  • 消费者接受到一条消息必须进行确认,通过basic.ack方式确认消息。或者在订阅消息的时候就讲auto_ack设置为True。
  • 队列收到消费者的确认才会在队列中删除这条消息。
  • 如果消费者因为故障诶呦发送确认消息,rabbitmq将不会给这个消费者发送更多消息,只有收到确认了才会给这个消费者发送下一条消息。
  • 消费者收到rabbimq的消息后,可以选择拒绝,通过basic.reject命令。如果把reject命令的requeue参数设置成true的话,rabbitmq将会把消息发送给下一个消费者。如果是false,消息将会从队列中移除,而不会发送给下一个消费者。如果你检测到一条错误的消息,而任何一条消费者都无法处理的时候,这样做就十分有用。
  • 死信队列(dead letter)用来存放那些被拒绝而不重新入队的消息。
  • 消费者和生产者都能通过queue.declare来创建队列。如果不指定队列名称,将会获得一个随机队列名称。exclusive参数如果设置为true,队列将会变成私有的、此时只有你的应用程序才能消费队列。auto-delete参数,当对吼一个消费者取消订阅后,队列会自动移除。
  • 如果创建一个已经存在的队列,如果声明的参数匹配现有的队列,rabbitmq将什么也不做,并成功返回。如果参数不匹配,队列创建失败。如果只想检测队列是否存在,可以设置queue.decalare的passive选项为true,存在则会成功返回,错误也不会创建队列,而是返回错误。
  • 发送的消息到了不存在的队列,rabbitmq会忽略他们。
  • 除了direct、fanout、topic交换器,还有header交换器,起作用和direct一样,但是性能比direct差很多,几乎不用。
  • 服务器必须实现direct类型的交换器,包含一个空白字符串名称的默认交换器。当声明一个队列时,他会自动绑定到默认交换器上,并以队列名称为路由建。
  • *匹配任意文本。
  • vhost提供了隔离功能,vhost之间是绝对隔离的,默认vhost为“/”,通过缺省的guest用户和guest密码就能访问默认vhost。当在rabbitmq创建一个用户时,用户通常会被指派给至少一个vhost,并且只能范文被指派的vhost队列、交换器、和绑定。
  • 重启rabbitmq服务器,队列和交换器、包括里面的消息都会丢失。原因在于队列和交换器的durable属性默认为false。如果设置为true,重启rabbitmq后不需要重新创建队列和交换器。建议设置为true实现队列和交换器持久化。
  • 有了队列和交换器持久化,才能实现消息持久化。在消息发布之前,通过把它的投递模式(deliver mode)选项设置为2,就可以把消息标志位持久化。
  • 消息持久化的实现:当发布一条持久化消息到持久化交换器上时,rabbitmq会将消息提交到持久化日志文件后才发送相应。如果状态条消息到了非持久化队列,消息会从持久化日志中移除,也就是成了非持久化消息。
  • 一旦你从持久化队列中消费了持久化消息(并且得到确认),rabbitmq会在持久化日志中标记为等待垃圾收集。
  • 消息持久化需要付出性能的代价,写入磁盘比写入内存慢得多,而且也会减少rabbitmq服务器每秒处理的消息总数。将rabbitmq的消息存储于ssd上的话,可以极大得提升持久化消息通信的性能。
  • 使用事务(AMQP transaction)会极大的降低rabbitmq的性能。

 

rabbitmq相关参数解释:

https://blog.csdn.net/QQ994406030/article/details/79923984

 

 

 

持久化日志文件叫什么

Published by

风君子

独自遨游何稽首 揭天掀地慰生平