zoukankan      html  css  js  c++  java
  • (转)RabbitMQ学习之exchange总结

    http://blog.csdn.net/zhu_tianwei/article/details/53969674

    前面介绍了几类exchange的作用,这个总结一下: 
    direct:消息会被推送至绑定键(binding key)和消息发布附带的选择键(routing key)完全匹配的队列。默认有”AMQP default”,它用一个空字符串表示,它是direct类型的exchange,任何发往这个exchange的消息都会被路由到routing key的名字对应的队列上,如果没有对应的队列,则消息会被丢弃。

    声明exchange 
    channel.basicPublish(exchange, routingKey, props, body); 
    发布消息 
    channel.basicPublish(exchange, routingKey, null, message .getBytes()); 
    消费端绑定routing key 
    channel.queueBind(queue, exchange, routingKey) 
    接收消息 
    channel.basicConsume(queue, true, consumer);

    fanout:一个发送到exchange的消息都会被转发到与该exchange绑定的所有队列上。

    声明exchange 
    channel.exchangeDeclare(exchange, “fanout”); 
    发布消息 
    channel.basicPublish(exchange, queue, null, message .getBytes()); 
    消费端绑定 
    channel.queueBind(queue, exchange, “”); 
    接收消费 
    channel.basicConsume(queue, true, consumer);

    topic:一个附带特殊的选择键将会被转发到绑定键与之匹配的队列中。需要注意的是:关于绑定键有两种特殊的情况。 
    1。* 可以匹配一个标识符。 
    2。# 可以匹配0个或多个标识符。

    声明exchange 
    channel.exchangeDeclare(exchange, “topic”); 
    发布消息 
    channel.basicPublish(exchange, routingKey, null, msg 
    消费端绑定 
    channel.queueBind(queue, exchange, “kernel.*”); 
    接收消息 
    channel.basicConsume(queue, true, consumer);

    Headers:发送者在发送的时候定义一些键值对,接收者也可以再绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息。匹配有两种方式all和any。这两种方式是在接收端必须要用键值”x-mactch”来定义。all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。

    声明exchange 
    channel.exchangeDeclare(exchange,ExchangeTypes.HEADERS,false,true,null); 
    发布消息 
    Map headers = new Hashtable(); 
    headers.put(“aaa”, “01234”); 
    Builder properties = new BasicProperties.Builder(); 
    properties.headers(headers); 
    channel.basicPublish(exchange,”“,properties.build(),message.getBytes()); 
    消费端绑定 
    channel.queueDeclare(queue,false, false, true,null); 
    Map headers = new Hashtable(); 
    headers.put(“x-match”, “any”);//all any 
    headers.put(“aaa”, “01234”); 
    headers.put(“bbb”, “56789”); 
    channel.queueBind(queue, exchange,”“, headers); 
    接收消息 
    channel.basicConsume(QUEUE_NAME, true, consumer);

    一个消息先有exchange通过绑定关系,判断要投递到哪个消费队列,根据exchange类型的投递的判断逻辑也不同。 

  • 相关阅读:
    node获取请求参数的方法get与post请求
    express框架路由未导出错误:Router.use() requires a middleware function but got a Object
    移动端学习之理解WEB APP、Native APP、Hybrid APP以及React Native/uniapp包括H5、小程序等的区别与共通之处
    微信小程序
    “You may need an appropriate loader to handle this file type”
    vue-cli Cannot find module 'less'
    Node 跨域问题 Access to XMLHttpRequest at 'http://localhost:8080/api/user/login' from origin 'http://localhost:808
    Access denied for user 'root'@'localhost' (using password: YES)
    nrm : 无法加载文件 C:Users......因为在此系统上禁止运行脚本。
    继承树追溯
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7124648.html
Copyright © 2011-2022 走看看