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

Headers类型的exchange使用的比较少,它也是忽略routingKey的一种路由方式。是使用Headers来匹配的。Headers是一个键值对,可以定义成Hashtable。发送者在发送的时候定义一些键值对,接收者也可以再绑定时候传入一些键值对,两者匹配的话,则对应的队列就可以收到消息。匹配有两种方式all和any。这两种方式是在接收端必须要用键值"x-mactch"来定义。all代表定义的多个键值对都要满足,而any则代码只要满足一个就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange则没有这个要求,因为键值对的值可以是任何类型。

1.生产者Producer.Java

[java] view plaincopy print?
  1. package cn.slimsmart.rabbitmq.demo.headers;
  2. import java.util.Date;
  3. import java.util.Hashtable;
  4. import java.util.Map;
  5. import org.springframework.amqp.core.ExchangeTypes;
  6. import com.rabbitmq.client.AMQP;
  7. import com.rabbitmq.client.AMQP.BasicProperties;
  8. import com.rabbitmq.client.AMQP.BasicProperties.Builder;
  9. import com.rabbitmq.client.Channel;
  10. import com.rabbitmq.client.Connection;
  11. import com.rabbitmq.client.ConnectionFactory;
  12. public class Producer {
  13. private final static String EXCHANGE_NAME = "header-exchange";
  14. @SuppressWarnings("deprecation")
  15. public static void main(String[] args) throws Exception {
  16. // 创建连接和频道
  17. ConnectionFactory factory = new ConnectionFactory();
  18. factory.setHost("192.168.36.102");
  19. // 指定用户 密码
  20. factory.setUsername("admin");
  21. factory.setPassword("admin");
  22. // 指定端口
  23. factory.setPort(AMQP.PROTOCOL.PORT);
  24. Connection connection = factory.newConnection();
  25. Channel channel = connection.createChannel();
  26. //声明转发器和类型headers
  27. channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.HEADERS,false,true,null);
  28. String message = new Date().toLocaleString() + " : log something";
  29. Map<String,Object> headers =  new Hashtable<String, Object>();
  30. headers.put("aaa", "01234");
  31. Builder properties = new BasicProperties.Builder();
  32. properties.headers(headers);
  33. // 指定消息发送到的转发器,绑定键值对headers键值对
  34. channel.basicPublish(EXCHANGE_NAME, "",properties.build(),message.getBytes());
  35. System.out.println("Sent message :'" + message + "'");
  36. channel.close();
  37. connection.close();
  38. }
  39. }

2.消费者Consumer.java

[java] view plaincopy print?
  1. package cn.slimsmart.rabbitmq.demo.headers;
  2. import java.util.Hashtable;
  3. import java.util.Map;
  4. import org.springframework.amqp.core.ExchangeTypes;
  5. import com.rabbitmq.client.AMQP;
  6. import com.rabbitmq.client.Channel;
  7. import com.rabbitmq.client.Connection;
  8. import com.rabbitmq.client.ConnectionFactory;
  9. import com.rabbitmq.client.QueueingConsumer;
  10. public class Consumer {
  11. private final static String EXCHANGE_NAME = "header-exchange";
  12. private final static String QUEUE_NAME = "header-queue";
  13. public static void main(String[] args) throws Exception {
  14. // 创建连接和频道
  15. ConnectionFactory factory = new ConnectionFactory();
  16. factory.setHost("192.168.36.102");
  17. // 指定用户 密码
  18. factory.setUsername("admin");
  19. factory.setPassword("admin");
  20. // 指定端口
  21. factory.setPort(AMQP.PROTOCOL.PORT);
  22. Connection connection = factory.newConnection();
  23. Channel channel = connection.createChannel();
  24. //声明转发器和类型headers
  25. channel.exchangeDeclare(EXCHANGE_NAME, ExchangeTypes.HEADERS,false,true,null);
  26. channel.queueDeclare(QUEUE_NAME,false, false, true,null);
  27. Map<String, Object> headers = new Hashtable<String, Object>();
  28. headers.put("x-match", "any");//all any
  29. headers.put("aaa", "01234");
  30. headers.put("bbb", "56789");
  31. // 为转发器指定队列,设置binding 绑定header键值对
  32. channel.queueBind(QUEUE_NAME, EXCHANGE_NAME,"", headers);
  33. QueueingConsumer consumer = new QueueingConsumer(channel);
  34. // 指定接收者,第二个参数为自动应答,无需手动应答
  35. channel.basicConsume(QUEUE_NAME, true, consumer);
  36. while (true) {
  37. QueueingConsumer.Delivery delivery = consumer.nextDelivery();
  38. String message = new String(delivery.getBody());
  39. System.out.println(message);
  40. }
  41. }
  42. }

实例代码:http://download.csdn.net/detail/tianwei7518/8136413

转载于:https://www.cnblogs.com/telwanggs/p/7124635.html

(转)RabbitMQ学习之Headers交换类型(java)相关推荐

  1. (转) RabbitMQ学习之发布/订阅(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887733 参考:http://blog.csdn.NET/lmj623565791/artic ...

  2. (转)RabbitMQ学习之主题topic(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40887775 参考:http://blog.csdn.NET/lmj623565791/artic ...

  3. RabbitMq学习笔记003---RabbitMQ处理类型分类

    RabbitMQ处理的情况可以大体上分为7种情况 1.简单的单向发送和接收 一个发送者(Productor)和一个接收者(Comsumer),例子为Hello World 2.Work Queue 工 ...

  4. java rabbitmq 绑定_RabbitMQ:交换,队列和绑定 - 谁设置了什么?

    当使用RabbitMQ发送消息时,您基本上有交换,队列和绑定 . 我理解他们的想法以及他们如何相互联系,但我不确定是谁设置了什么 . 基本上,我的应用程序中有三个场景 . 场景1:一个发布者,多个工作 ...

  5. (转) RabbitMQ学习之helloword(java)

    http://blog.csdn.net/zhu_tianwei/article/details/40835555 amqp-client:http://www.rabbitmq.com/java-c ...

  6. RabbitMQ 学习笔记

    RabbitMQ 学习笔记 RabbitMQ 学习笔记 1. 中间件 1.1 什么是中间件 1.2 为什么要使用消息中间件 1.3 中间件特点 1.4 在项目中什么时候使用中间件技术 2. 中间件技术 ...

  7. Rabbitmq学习笔记(尚硅谷2021)

    Rabbitmq学习笔记 (尚硅谷) 1.MQ 的概念 1.1 什么是 MQ? 1.2 为什么要用 MQ? 削峰 解耦 异步 1.3 MQ 的分类 ActiveMQ Kafka RocketMQ Ra ...

  8. RabbitMQ学习笔记

    目录 一.MQ 的相关概念 MQ是什么? MQ三大优势 MQ的劣势 MQ 的产品 RabbitMQ核心 JMS 安装 二.HelloWorld 三.Work Queues(轮训) 消息应答 Rabbi ...

  9. RabbitMQ 学习知识点总结

    一个简洁的博客网站:http://lss-coding.top,欢迎大家来访 学习娱乐导航页:http://miss123.top/ 1. 消息队列简介 1.1 什么是 MQ MQ(message q ...

最新文章

  1. Spring JdbcTemplate方法详解
  2. MongoDB下载地址
  3. 【学术相关】这个英文语法校正插件很赞!可以校正邮件,也可以校正论文
  4. Android之library class android.webkit.WebViewClient depends on program class android.net.http.SslErro
  5. readyread信号不触发_触发器型PFD与传统型PFD性能仿真对比
  6. [html] HTML5的Server-Sent和WebSocket有什么区别?
  7. 字节跳动高工面试:mysql索引视频教程
  8. 多线程 之 生产者与消费者
  9. 跟我一起写 Makefile ---转
  10. linux 查看端口占用命令 亲测可用
  11. 【车间调度】基于matlab遗传算法求解混合流水车间调度最优问题【含Matlab源码 901期】
  12. 专家教你简单又轻松的MD5解密方法,一看就会
  13. 百度云个人服务器搭建
  14. 宽带远程服务器无响应,宽带拨号上网服务器无响应是解决方法(图文)
  15. 20个常用教育心理学效应
  16. 什么是收缩压和舒张压?
  17. 搬砖试金石!github星标7W算法刷题宝典,还愁拿不下大厂offer?
  18. 将模板内容存储到数据库,通过URL访问报表
  19. 微信小程序电商商城系统怎样搭建?
  20. Dev-C++ 实用安装教程

热门文章

  1. Java虚拟机专题之类加载机制
  2. windows 批处理 for循环语句
  3. (10)FPGA与ASIC区别
  4. (140)System Verilog替代交叉覆盖率
  5. (20)FPGA数据接口同步化
  6. linux sort多磁盘排序,linux shell sort多字段排序
  7. ubuntu镜像添加jdk_docker基础镜像ubuntu添加jdk1.8
  8. 2021-07-25 野火板子25MHz晶振改为正点原子8MH晶振
  9. mysql锁在粒度上分为_mysql锁的简单理解
  10. Linux的capability深入分析(1)