AMQP中消息的路由过程和Java开发者熟悉的JMS存在一些差别,AMQP中增加了Exchange和Binding的角色,生产者把消息发布到Exchange上,Binding决定发布到Exchange上的消息应该发送到那个队列上,消息最终到达队列并被消费者接收。

Exchange(交换器)类型

  Exchange分发消息时根据类型的不同分发策略也不相同,目前共有4种类型:direct(默认,点对点,提前预知性的绑定)、fanout(群发性的绑定,类似于多播)、topic(正则,归类性的绑定)、headers(and、or的绑定),headers匹配消息的header而不是routing-key(路由键),除此之外,headers交换器和direct交换器完全一致,但性能差好多,目前几乎已经不用了。

  1.Direct Exchange(默认,点对点)

  消息中的routing-key(路由键)如果和Binding中的binding-key一致,交换器就将该消息发到对应的队列中。如果一个队列绑定到交换器要求路由键为“dog”,则只转发routing-key标记为dog的消息,它是完全匹配、单播的模式。

  2.Fanout Exchange(类似于多播)

  每个发到fanout类型交换器的消息都会分到所有绑定的队列上去,fanout交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上,很像子网广播,每台子网内的主机都获得了一份复制的消息,fanout类型转发消息是最快的。

  队列中的数据无论多少个队列,其数据一致。

  使用场景:

    1)、订单流程,如订单提交后,同时向客户发送短信及邮件等。

    2)、C/S软件弹出消息,通过轮询的方式,在C/S中绑定fanout Exchange,这时候服务器有消息的话,可以及时推送。

    3)、类似于淘宝的部分流程,如催付,付款后提醒,发货提醒,签收提醒,如给用户关联的推荐使用短信和邮件分别发送等。

      。。。。。

  3.Topic Exchange(通配符匹配)

  binding-key支持通配符,有两个通配符,“#”代表0个或多个单词,“*”代表一个单词,若消息的routing-key与之匹配,则将消息发至该队列。

  4.Headers Exchange(Headers匹配)

  headers采用muliple attribute来替代routing-key,通过设置headers中的x-match属性为all或any进行匹配,all:所有的header头信息必须匹配。any:只要有一个匹配就可以了。

  

  

  

最新文章

  1. WebApi 2:属性路由 [Route()],attribute routing
  2. linux下vi操作出现E325: ATTENTION的解决方法
  3. codevs 1690 开关灯 线段树水题
  4. 苹果推送APNS自己总结
  5. 14.4.1 Buffer Pool
  6. Windows Latex 中日文字体设置例
  7. spring容器启动扩展
  8. 阿里安全潘多拉实验室首先完美越狱苹果iOS 11.2
  9. ios 一步一步学会自定义地图吹出框(CalloutView)-->(百度地图,高德地图,google地图)
  10. SQL中MAX()
  11. Java中的代码点和代码单元(转)
  12. C# 使用AngleSharp 爬虫图片
  13. 基于 CDH 构建推荐系统
  14. JS 小技巧整理
  15. windows下,提权代码.
  16. Django-CRM项目学习(一)-admin组件
  17. 简单聊一聊那些svg的沿路径运动
  18. 探索未知种族之osg类生物---呼吸分解之更新循环一
  19. H.264开源解码器评测
  20. Centos7安装vsftpd

热门文章

  1. HDU 6162 Ch’s gift
  2. MT【3】只有零向量旋转不变
  3. MT【53】对数平均做数列放缩
  4. WorkFlow基础实战
  5. mysql存储过程变量的拼接
  6. GUI程序开发的流程(随时删除的源码)
  7. request请求地址
  8. Java基础-Eclipse第三方安装包管理工具之Maven
  9. H3C常用命令详解
  10. Git撤销&回滚操作