最近又重温了下关于RabbitMQ的相关知识点,感觉有些东西需要了解,并分享给大家,希望对你我都有帮助
1.队列协议中定义了4种不同类型的交换器,分别为headers,direct,fanout和topic,每种都实现了不同的路由算法。
headers
允许你匹配AMOP消息的headers而不是路由键,即routing-key(路由键为RabbitMQ决定将消息投递到哪个队列所遵循的规则)。 其实headers交换器和direct交换器是一致的,只是性能差距大。
direct
如果routing-key匹配的话,消息就会根据这个key被发送到相应的队列,是比较简单的一种交换器。direct为默认的交换器。
当声明一个队列时,这个队列会自动绑到默认交换器上,并以队列名称作为路由键。
channel.BasicPublish("", "default", properties, body); 参数一为默认的交换器类型,参数二为路由键,也就是队列名称。
fanout
fanout交换器是一种广播模式,当发送一条消息到fanout交换器时,这个交换器会把消息发送到所有绑定在此交换器上的队列。
topic
topic交换器可以将来自不同发送方的多条消息发送到同一个队列中。topic交换器的路由键必须是一些词的数组,用‘.’隔开,这些词的最大限度为255个字节。路由键有2种方式:
1.“ * ” 代表任意一个词
2.“ # ” 代表0个或者多个词
RabbitMQ既可以以发布/订阅模式作为队列服务器使用,也可以作为RPC(远程过程调度)服务器。
2.RabbitMQ能够确保消息在服务器重启后恢复,它将消息持久化到磁盘上的一个日志文件中。(支持持久化)
3.RabbitMQ使用“发送方确认模式”来保证消息的传递。
如果消息和队列是可持久化的,那么只会在队列将消息写在磁盘后才会发出消息确认。”发送方确认模式“的好处在于:异步。发布了消息,发送方(生产者)在等待确认消息的同时还可以继续发送消息,当收到确认消息,发送方的回调方法就会被触发来处理该确认消息。如果RabbitMQ内部发生了错误使得消息丢失,RabbitMQ会发送一条nack(未确认)消息来说明发布的消息已经丢失了。 RabbitMQ没有消息回滚这一说法,使“发送方确认模式”更轻量级。
4.RabbitMQ的事务是同步的,效率比较低(没有具体资料)
5.RabbitMQ是AMQP(高级消息队列)的标准实现。AMQP是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件。基于此协议的客户端和消息中间件传递消息,不用关注发送方/接收方,开发语言等。是一个异步消息传递所使用的应用层协议规范。
AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步,安全,高效的交互。
消息中间件的主要功能:消息的路由和缓存。(Exchange和Message Queue)交互机和消息队列。
合理使用消息队列可大幅度降低网络系统架构的耦合度和复杂度,让各集成部件拥有更灵活的自主弹性。