(1)、发布者

             var connectionFactory = new ConnectionFactory() { HostName="192.168.205.128",UserName="guest",Password="guest"};  //创建连接工厂
var connection = connectionFactory.CreateConnection(); //创建connection
var channel = connection.CreateModel(); //创建channel
//声明交换机
//String exchange, 交换机名称
//String type, 交换机类型
//Boolean durable, 是否持久化
//Boolean autoDelete, 是否自动删除
//IDictionary< String, Object > arguments 交换机参数
channel.ExchangeDeclare("headersExchange", ExchangeType.Headers, true, false, null);
//声明队列
//String queue, 队列名称
//Boolean durable, 是否持久化
//Boolean exclusive, 是否专有的(排外)
//Boolean autoDelete, 是否自动删除
//IDictionary<String, Object> arguments 队列参数
channel.QueueDeclare("headersQueue", true, false, false, null);
//将队列绑定到交换机上
//String queue, 队列名称
//String exchange, 交换机名称
//String routingKey, routingKey
//IDictionary< String, Object > arguments 绑定参数
IDictionary<String, Object> arguments = new Dictionary<String, Object>()
{
{"x-match","any"}, //设置x-match属性为any,即头信息中只要有一个匹配就可以了
{ "username","fanqi"}
};
channel.QueueBind("headersQueue", "headersExchange", string.Empty, arguments); //设置消息属性
var properties = channel.CreateBasicProperties();
properties.Headers = new Dictionary<String, Object>();
properties.Headers.Add("username", "fanqi"); //发布消息
//String exchange, 交换机名称
//String routingKey, routingKey
//IBasicProperties basicProperties, 发布属性
//Byte[] body 消息内容
channel.BasicPublish("headersExchange", string.Empty, properties, Encoding.UTF8.GetBytes("来自.net的问候"));
Console.ReadKey();

(2)、接收者

             var connectionFactory = new ConnectionFactory() { HostName = "192.168.205.128", UserName = "guest", Password = "guest" };  //创建连接工厂
var connection = connectionFactory.CreateConnection(); //创建connection
var channel = connection.CreateModel(); //创建channel
//声明交换机
//String exchange, 交换机名称
//String type, 交换机类型
//Boolean durable, 是否持久化
//Boolean autoDelete, 是否自动删除
//IDictionary< String, Object > arguments 交换机参数
channel.ExchangeDeclare("headersExchange", ExchangeType.Headers, true, false, null);
//声明队列
//String queue, 队列名称
//Boolean durable, 是否持久化
//Boolean exclusive, 是否专有的(排外)
//Boolean autoDelete, 是否自动删除
//IDictionary<String, Object> arguments 队列参数
channel.QueueDeclare("headersQueue", true, false, false, null);
//将队列绑定到交换机上
//String queue, 队列名称
//String exchange, 交换机名称
//String routingKey, routingKey
//IDictionary< String, Object > arguments 绑定参数 IDictionary<String, Object> arguments = new Dictionary<String, Object>()
{
{"x-match","any"}, //设置x-match属性为any,即头信息中只要有一个匹配就可以了
{ "username","fanqi"}
};
channel.QueueBind("headersQueue", "headersExchange", string.Empty, arguments);
//1.直接获取消息
//var result = channel.BasicGet("headersQueue", true);
//Console.WriteLine(Encoding.UTF8.GetString(result.Body));
//2.使用事件机制获取消息
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
consumer.Received += (sender, e) =>
{
Console.WriteLine(Encoding.UTF8.GetString(e.Body));
};
channel.BasicConsume("headersQueue", true, consumer);
Console.ReadKey();

RabbitMQ Headers Exchange示例的更多相关文章

  1. RabbitMQ headers Exchange

    Headers Exchange headers也是一种交换机类型,但是在rabbitmq官网中的教程中并没有说到.资料也很少,但是找一找总会有的. headers与direct的模式不同,不是使用r ...

  2. RabbitMQ学习之:(九)Headers Exchange (转贴+我的评论)

    From: http://lostechies.com/derekgreer/2012/05/29/rabbitmq-for-windows-headers-exchanges/ RabbitMQ f ...

  3. RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  4. RabbitMQ交换器Exchange介绍与实践

    RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...

  5. Rabbitmq交换器Exchange和消息队列

    通常我们谈到队列服务, 会有三个概念: 发消息者.队列.收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者 ...

  6. RabbitMQ(Exchange交换机详解)(四)

    Exchange:接收消息,并根据路由键转发消息所绑定的队列 ClientA,B将消息投递到交换机Exchange上,通过路由关系,投递到指定的queue1或者queue2上,通过监听投递到Clien ...

  7. RabbitMQ之Exchange

    交换机的作用: 生产者发送消息不会向传统方式直接将消息投递到队列中,而是先将消息投递到交换机中,在由交换机转发到具体的队列,队列在将消息以推送或者拉取方式给消费者进行消费,这和我们之前学习Nginx有 ...

  8. RabbitMQ通过Exchange.headers属性代替routekey,x-match实现队列精准匹配

    消费者: static void Main(string[] args) { ConnectionFactory factory = new ConnectionFactory() { HostNam ...

  9. .NET Core RabbitMQ探索(2)——RabbitMQ的Exchange

    实际上,RabbitMQ的生产者并不会直接把消息发送给队列,甚至生产者都不知道消息是否会被发送给一个队列.对于生产者而言,它们只能把消息发送到Exchange,一个Exchange所完成的工作相当简单 ...

随机推荐

  1. 20135220谈愈敏Linux Book_5

    第五章 系统调用 内核提供了用户进程与内核进行交互的一组接口. 应用程序发出请求->内核负责满足 目的:保证系统稳定可靠 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层 ...

  2. String基础

    一: String,StringBuffer与StringBuilder的区别??String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程 ...

  3. BaseServlet 继承 httpServlet

    BaseServlet   核心 package cn.core; import java.io.IOException; import java.lang.reflect.Method; impor ...

  4. PAT 1044 火星数字

    https://pintia.cn/problem-sets/994805260223102976/problems/994805279328157696 火星人是以13进制计数的: 地球人的0被火星 ...

  5. d3 选择器

    一.隔了一段时间没看D3了,好多api又陌生了.武林太大,唯有自强不息. D3 选择器算是学习D3的第一步吧. 跟 学习JQ一样.先熟悉下api,才能够如鱼得水,手到勤来. 二. 选择器 1.选择器 ...

  6. HGOI 20181030晚 题解

    Problem:给出全班人的个数总分和小明的分数(满分100分),求小明最低排名和最高排名 sol:假设小明的排名为k,总分为sum,小明的分数是r, 贪心求解, 最坏情况下,小明前面的比小明高一分( ...

  7. HGOI 20181028 题解

    HGOI 20181028(复赛备考) /* 真是暴力的一天,最后一题MLE?由于数组开得太大了!!! 270滚粗 考场上好像智商高了很多?!(假的) */ sol:暴力求解,然后没有数据范围吐槽一下 ...

  8. 【NOIP 2018】填数游戏(思考与推导)

    题目链接 这道题讲道理还是不错的,因为你需要不断挖掘其中的性质来帮助解题.可惜数据范围开在这里让考试时的我很慌,勉强也就写了$65$分就没了.回忆在考场上,思路是没有错的,就是发掘不够深入,思路还不够 ...

  9. string::replace

    #include <string> #include <cctype> #include <algorithm> #include <iostream> ...

  10. Jenkins + Pipeline 构建流水线发布

      Jenkins + Pipeline 构建流水线发布 利用Jenkins的Pipeline配置发布流水线 参考: https://jenkins.io/doc/pipeline/tour/depl ...