RabbitMQ 小结

来源:互联网 发布:phpcms和帝国cms 编辑:程序博客网 时间:2024/05/29 19:17

RabbitMQ之Hello World
在这篇文章中我们了解到消息发送端与消息接收端使用相同的队列名进行通信的基本流程

RabbitMQ之Work Queues
在这篇文章中我们了解到消息应答、持久化 和 公平分发 这三个操作。

消息应答:通过这个机制我们可以了解到发送的消息是否已被接收端接收(及处理完),以此来避免当接收端出现某些异常导致消息未被接收(或处理完)而发送端却不知情的情况。当消息应答设置为手动应答时,若发送端没有接收到关于这条消息的应答则会重新分法。

持久化: 为了避免因RabbitMQ的服务器出现异常而导致消息丢失,引入了消息持久化的操作,通过将队列和消息持久化来避免此类问题的出现。

公平分法:为了避免忙的忙死,闲的闲死,通过channel.basicQos(prefetchCount)和消息应答机制控制同一时间只用接收端只能获取到prefetchCount参数设置的消息数,在未处理完前不再接收新的消息。

RabbitMQ之Publish/Subscribe
在这篇文章之前我们发送的消息在同一时间都只能被一个接收端接收,而在篇文章中我们实现了将一个消息同时发送给多个接收端。也刷新了我们对消息发送模型的认识,原以为消息发送者将消息直接发送到指定的队列中,消息接收者再从指定的队列中获取消息,然通过这篇文章,我们了解到消息发送者并不直接将消息发送到队列中,而是发送到exchange中,然后再由exchange决定该消息是发送给一个接收者还是多个接收者又或者是丢弃该消息。

exchange的类型有四种: direct、topic、headers、fanout

前面的两篇文章也使用了exchange,只不过使用的是无名的exchange。(这个无名的exchange对应的类型是什么呢?)

这篇文章使用的是fanout类型的exchange,该类型的exchange会忽略路由关键字,而直接将消息发送到与该exchange绑定的队列中。

RabbitMQ之Routing
笔者有使用印象笔记的习惯,一个笔记本专门用于收集资料,整理笔记并打上对应的标签后将其移入对应的笔记本中。

在这篇文章中,我们使用direct类型的exchage来实现类似笔记整理的过程。direct类型的exchange可以根据消息的routing key找到与之匹配的binding key,然后将消息存入指定的队列中,一个队列可以使用多个binding key。
思考:一个消息是否可以拥有多个routing key呢?

RabbitMQ之Topics
direct类型的exchange 在使用时,接收端必须指定完整的binding key值,如果我们希望能够在binding key中实现类似于正则表达式的匹配效果,可以使用topic类型的exchange。

binding key中具有特殊意义的字符:

*字符表示一个任意的单词\#字符表示0个或多个单词

binding key中每个单词由.进行分隔

原创粉丝点击