文档章节

[RabbitMQ]07_RabbitMQ学习之Headers交换类型(java)

morpheusWB
 morpheusWB
发布于 2017/09/03 19:14
字数 573
阅读 21
收藏 0

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

1.生产者Producer.Java

 

[java] view plain copy

 print?

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

2.消费者Consumer.java

 

 

[java] view plain copy

 print?

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

 

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

本文转载自:http://blog.csdn.net/zhu_tianwei/article/details/40923131

morpheusWB
粉丝 29
博文 92
码字总数 14703
作品 0
西安
程序员
私信 提问
RabbitMQ 3.6.1 RC1 发布

RabbitMQ 3.6.1 RC1 发布了,下载地址: https://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v3_6_1_rc1 该版本完整的改进内容如下: Bug Fixes Purging a lazy queue cou......

淡漠悠然
2016/02/13
960
0
RabbitMQ 3.5.5 正式发布,AMQP 消息服务器

RabbitMQ 3.5.5 正式发布,此版本除了常规的 bug 修复之外,提升了队列页面信息到磁盘的速度。 UPDATE 2:新 RPM 和 Debian 包已经附在发行说明里面,主要修复了两个回退问题: #321; Thanks...

oschina
2015/09/25
1K
1
RabbitMQ 3.6.1 RC2 发布

RabbitMQ 3.6.1 RC2 发布了,下载地址: https://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v3_6_1_rc2 完整改进记录: Server Bug Fixes Windows installer failed to c......

淡漠悠然
2016/02/21
1K
0
RabbitMQ 3.6.1 发布

RabbitMQ 3.6.1 发布了,该版本引入了 rabbit.channel_operation_timeout 参数。 完整改进记录: Server Bug Fixes Purging a lazy queue could result in an exception GitHub issue: rabbi......

淡漠悠然
2016/03/02
1K
0
基于 RabbitMQ 构建一个类似 Resque 的作业处理系统

RabbitMQ的是一个复杂的野兽。 它灵活,强大,但也很难完全把控和掌握。 许多不同的使用情况和使用模式都可以建立在这个强大的软件之上,但在第一次尝试为一个特定的解决方案编写代码时,差错...

oschina
2014/10/15
3.4K
2

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
39分钟前
13
1
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
10
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部