• rabbitmq


    AMQP协议是一个高级抽象层消息协议,rabbitmq是qmqp协议的实现。它主要包括以下组件:

    交换机有4种不同的交换机类型:
    直连交换机:Direct exchange
    扇形交换机:Fanout exchange
    主题交换机:Topic exchange
    首部交换机:Headers exchange

    扇形交换机:广播消息。它能把接收到的消息全部发送给帮定在自己身上的队列,速度最快。

    直连交换机:是一种带路由功能的交换机,一个队列会和一个交换机绑定,除些之外再绑定一个rounting_key,当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,就会被 这个交换机送送到指定的队列里面去。同样一个binding_key也是支持应用到多个队列中的。

    适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。

    http://www.jianshu.com/p/469f4608ce5d

    直连交换机的routing_key方案非常简单,如果我们希望一条消息发送给多个队列,那么这个交换机需要绑定上非常多的routing_key,假设每个交换机上都绑定一堆的routing_key连接到各个队列上。那么消息的管理就会异常的困难。所以rabbitmq提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会跟据这个规则将数据发送到对应的多个队列上。
    主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用*.#.*....的格式,每个部分用.分开,其中:
    *表示一个单词
    #表示任意数量(零个或多个单词)
    假设有一条消息的routing_key为fast.rabbit.white,那么带有这样binding_key的几个队列都会接收这条消息。(1.fast.. 2. ..white 3. fast.# 4. .....)
    下面这个图对主题交换机的描述比较到位:

    当一个队列的绑定键为#的时候,这个队列将会无视消息的路由键,接收所有的消息。

    首部交换机是忽略routing_key的一种路由方式。路由器和交换机路由规则是通过header信息来交换的,这个有点像http的headers。将一个交换机声明成首部交换机,绑定一个队列的时候,定义一个hash的数据结构,消息发送的时候,会携带一组hash数据结构的信息,当hash的内容匹配上的时候,消息就会被 写入队列。

    绑定交换机和队列的时候,hash结构中要求携带一个键"x-match",这个键的value可以是any或者all,这个代表消息携带的hash是需要全部匹配all,还是仅匹配一个键any就可以了。相比直连交换机,首部交换机的优势是匹配的规则不被 限定为字符串string

    message:由header和BODY组成,header是由生首者添加的各种属性的集合,包括message是否被 持久化,由哪个message queue接受,优先级是多少等。而body是真正传输的app数据。

    binding联系了exchange与message queue. exchange在与多个message  queue发生binding后会生成一张路由表,路由表中存储着message queue所需消息的限制条件即binding key.当exchange收到message时会解析其header得到routing key,exchange根据routing key与exchange type将message路由到message queue.binding key由consumer在binding exchange与message queue时指定,而routing key由producer发送message时指定,两者的匹配方式 由exchange type决定

    connection:连接,对于rabbitmq而言,其实就是一位客户端和broker之间的tcp连接。

    http://www.cnblogs.com/luxiaoxun/p/3918054.html 

  • 相关阅读:
    c#基础语法(第二节课后作业/笔记)
    C#第四节课
    Hello, cnblog!
    64位的系统可以让IIS在32位的环境下运行asp.net程序(转)
    Web.Config中设置Session问题,导致无法向会话状态服务器发出会话状态请求
    远程测试asp.net web service 配置
    jQuery不使用$方法
    导入数据到SQL SERVER 2005方法
    图片与Base64相互转换,c#与java通用
    一道递归算法题,一道冒泡算法题
  • 原文地址:https://www.cnblogs.com/bass6/p/6541522.html
Copyright © 2020-2023  润新知