rabbitmq 是一个基于AMQP协议的轻量级,可靠,可扩展且可移植的消息中间件。
消息发送到消息消费共需要以下组件支持:
1、消息提供者
1)用于发送消息
2、交换机
1)交换机用于接收提供者发送的消息,再将消息转发到与之绑定并路由规则相同的消息队列
2)交换机共分一下4中类型:direct, topic, headers,fanout
direct: direct类型交换机可以指定一个routingKey,用来进行消息过滤以及转发匹配
当交换机于消息队列进行绑定时,可以指定一个routingKey,如果提供者发送
消息时同样可以指定一个routingKey,如果该routingKey于交换机和消息队列
绑定时指定的routingKey相同,则该消息将由交换机转发到消息队列,否则消息将发送失败
topic: 同direct类型交换机相同,topic类型交换机同样可以指定一个routingKey,但是不同的是
该routingKey必须由“.”分隔的单词,单词内容可以自定义,例如 routingKey.rk,同时支持
“*”号和“#”号,*号代表一个单词,#代表一个或多个单词,例如:
routingkey.* 可以匹配 routingkey.rr或者routingkey.tt
routingkey.# 可以匹配 routingkey.rr.ee或者routingkey.tt.yy.dd
fanout: fanout 类型交换机则不支持路由,只要提供者发送消息到该交换机,消息就会被转发给与该交换机绑定的消息队列中
headers: heanders类型交换机可以根据提供者发送的消息中的MessageProperties类中设置的headers属性进行匹配消息队列,
headers的值是以键值对的格式设置,值可以使任意类型,如果消息提供者发送的消息中的header交换机与消息队列
绑定时设置的header属性值匹配成功,交换机则转发消息到消息队列
3、消息队列
1)存储消息提供者发送的消息
4、消费者
1)接收其监听的消息队列,获取消息
工作模式共分为以下6种:
1、最简单的一提供、一消费模式:提供者消息->消息队列->消费者接受消息
2、一提供多消费模式:提供者发送消息->消息队列->多个消费者接收消息并消费(C1和C2接收的消息不相同)
3、发布与订阅模式:提供者发送消息->交换机->消息队列->消费者接收。
4、提供者发送消息到交换机,通过交换机进行路由规则匹配将消息发送某个消息队列,消费者消费监听的消息队列中的消息
5、提供者发送消息到topic类型交换机,通过匹配routingkey转发消息到消息队列
6、远程过程调用(RPC)