《RabbitMQ系列教程-第四章-08-Header类型交换机》_rabbitmq header交换机

本文介绍了如何使用RabbitMQ创建连接,声明header类型的交换机,设置队列,以及利用key/value键值对进行消息路由。展示了生产者如何指定header发送消息,以及消费者如何接收并处理带有特定header的消息。
摘要由CSDN通过智能技术生成
    // 创建连接和频道
    ConnectionFactory factory = new ConnectionFactory();
    factory.setHost("192.168.40.132");
    factory.setPort(5672);
    factory.setUsername("lscl");
    factory.setPassword("admin");
    factory.setVirtualHost("/lscl");

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    /\*

定义一个交换机为header类型
true:代表持久化
true:代自动删除(没有consumer时自动销毁)
false:代表不是内部使用的交换机
null:传递的参数为null
*/
String exchangeName = “test_header”;

    // 声明交换机和类型headers
    channel.exchangeDeclare(exchangeName, BuiltinExchangeType.HEADERS, true, false, false, null);

    String queue = "test\_header\_queue";
    // 定义队列
    channel.queueDeclare(queue, true, false, false, null);

	// 声明header
    Map<String, Object> bindingHeaders = new HashMap<>();
    /\*

all:代表发送消息时必须匹配header中的所有key/val对
any:代表发送消息时只需要匹配header中的任意一个key/val对
*/
bindingHeaders.put(“x-match”, “all”);
bindingHeaders.put(“key1”, “147”);
bindingHeaders.put(“key2”, “258”);
bindingHeaders.put(“key3”, “369”);

    // 将交换机绑定到队列,并指定header信息
    channel.queueBind(queue, exchangeName, "", bindingHeaders);

    String body = "header....";

	// 发送信息携带的header
    Map<String, Object> requestHeader = new HashMap<>();
    requestHeader.put("key1", "147");

// requestHeader.put(“key2”, “258”);
// requestHeader.put(“key3”, “369”);

    // 消息配置对象
    Builder properties = new AMQP.BasicProperties.Builder();
    properties.headers(requestHeader);

    // 将消息直接发送给交换机(携带指定的参数header),让交换机自己根据header条件去转发到指定queue
    channel.basicPublish(exchangeName, "", properties.build(), body.getBytes());

    channel.close();
    connection.close();
}

}


#### 4.8.3 消费者



package com.lscl.rabbitmq;

import java.io.IOException;
import java.util.Hashtable;
import java.util.Map;

import com.rabbitmq.client.*;

public class Consumer11_Header {
public static void main(String[] args) throws Exception {
// 创建连接和频道
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(“192.168.40.132”);
factory.setPort(5672);
factory.setUsername(“lscl”);
factory.setPassword(“admin”);
factory.setVirtualHost(“/lscl”);

    Connection connection = factory.newConnection();
    Channel channel = connection.createChannel();

    channel.basicConsume("test\_header\_queue", true, new DefaultConsumer(channel) {
        @Override
        public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

            System.out.println("body:" + new String(body));
        }
    });

}

}


#### 4.8.4 header类型交换机小结


在`header`类型交换机中,放弃了`routing key`,取而代之的是`key/value`键值对,在Producer绑定队列时指定`key/value`键值对,当Producer发送消息时也会指定一个`key/value`键值对,如果此时的`key/value`键值对符合当初绑定队列的键值对,那么消息就可以路由到此队列,反之消息则丢失;


* `header`类型交换机工作原理图:


### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)


因篇幅有限,仅展示部分资料


网络安全面试题


![](https://img-blog.csdnimg.cn/img_convert/80674985176a4889f7bb130756893764.png)


绿盟护网行动


![](https://img-blog.csdnimg.cn/img_convert/9f3395407120bb0e1b5bf17bb6b6c743.png)


还有大家最喜欢的黑客技术


![](https://img-blog.csdnimg.cn/img_convert/5912337446dee53639406fead3d3f03c.jpeg)


**网络安全源码合集+工具包**


![](https://img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png)


![](https://img-blog.csdnimg.cn/img_convert/4a5f4281817dc4613353c120c9543810.png)

**所有资料共282G**,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值