消息队列:信息从一个应用程序传递给另一个应用程序,像总线一样,只不过是软件总线。把消息放到队列一直不会消失,直到消费者取走。
主流:RabbitMQ Kafka RocketMQ
这一篇重点来学习 RabbitMQ 官网:https://www.rabbitmq.com/
RabbitMQ Erlang语言开发 开源
RabbitMQ支持多种协议,核心协议是 AMQP 明白核心协议基本也就理解了RabbitMQ
AMQP:二进制协议:这个协议是这样的:broker-代理,这里包括两个大块,一个是接收消息的exchange 一个是queue.
exchange呢接收消息,然后把副本按路由给queue。那代理怎么把消息给消费者呢,消费者就是使用消息或者处理消息的应用,
两种方式,一种是推,一种是拉。要么代理把消息按订阅推给消息者,一种是消息者自己拉消息或者叫自己按需取消息。大概就是这个过程:
一个应用生产消息----代理----一个应用使用消息 或者叫消费消息 或者叫处理消息
交换机的分类
1:直连交换机:很好理解 路由的K就是队列的名字 带着队列名字的消息到达交换机 那交换机直接发送到对应的队列就好了。
2:扇形交换机:所有绑定到此交换机的队列都可以收到消息,消息广播路由。我们常用的就是分页式系统可以使用这种方式来广播配置状态更新。
3:主题交换机:使用路由,队列绑定到交换机时候配置的routing key 可以设置模糊匹配以点‘.’,分隔* 或者# 。当有消息来的时候 匹配上的队列会收到相应的消息
4:头交换机:类似于直连,又区别于直连。直连路由k只支持字串,请求头信息没有这个约束 可以使用数字 字典 可以用于路由键不必是字串的直连交换机。
队列:
注意:1:起名:amq开头的队列名给Broker内部使用 2:持久化 设置交换机持久化,设置队列持久化 也要设置消息持久化 3:推荐订阅消息
消息确认 删除:Broker发完就删 消费者说删再删
还有一种叫拒绝消息:注意死循环 一个消费者 不停的拒绝要求重发
AMQP tcp可靠传输 可设置多通道使用同一tcp连接
参考:https://www.cnblogs.com/arthinking/p/15422958.html
本文来自博客园,作者:写程序到老,转载请注明原文链接:https://www.cnblogs.com/angin-iit/p/16435219.html