rabbitmq 服务端 exchange怎么绑定queue

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq 服务端 exchange怎么绑定queue相关的知识,希望对你有一定的参考价值。

概述由于种种原因,RabbitMQ到目前为止,官方还没有实现优先级队列,只实现了Consumer的优先级处理。但是,迫于种种原因,应用层面上又需要优先级队列,因此需求来了:如何为RabbitMQ加入优先级队列特性。查询资料后,得知RabbitMQ虽然官方没有支持此特性,但是社区已经有相关优先级队列插件了,并且这个插件被列在RabbitMQ官方网站中了。地址如下:插件安装不要立刻下载这个url中的那个链接,要先根据你想要更新目标的rabbitmq版本再去另外一个地方下载相应插件,如:会列出两大版本的插件目录(选择对应目录进入下载,否则会报错):插件如何安装?进入rabbitmq安装目录,进入plugins目录,将上面这个ez文件拷贝到plugins目录中,然后运行命令来enable这个插件centos下,默认路径在:/usr/lib/rabbitmq/lib/rabbitmq_server-3.3.4/plugins(版本号可能会变化)windows下,默认路径在:C:\ProgramFiles\RabbitMQServer\rabbitmq_server-3.3.4\plugins(版本号可能会变化)把ez文件拷贝过去,然后运行列举插件列表命令:找到这个优先级队列插件名为:rabbitmq_priority_queue执行:rabbitmq-pluginsenablerabbitmq_priority_queueok,重新启动rabbitmq-server服务。这样,server端的配置算完成了。C#代码端需要作出的更改下面看看客户端类库的编写:我们先要定义优先级枚举,继承自byte,因为RabbitMQ的C#客户端优先级是用byte来传递的:先定义3个级别的优先级:低、中、高(其实可以定义很多级别,只是为了简化,因此只定义了3个级别)有2个地方需要改动:申明队列时需要加入自定义的属性发送消息到rabbitmq时,设置自定义属性internalstaticIDictionaryQueueArgumentsgetIDictionaryarguments=newDictionary();arguments["x-max-priority"]=10;//定义队列优先级为10个级别returnarguments;channel.QueueDeclare("queueName",true,false,false,QueueArguments);//QueueArguments就是上面定义的这个dictionaryvarheaders=channel.CreateBasicProperties();headers.Priority=(byte)msg.Priority;//在这里把继承自byte的枚举转换成bytechannel.BasicPublish("exchange","route",headers,SerializerUtility.Serialize2Bytes(msg));其他注意的地方在装了优先级队列插件的rabbitmq-server实例中,所有的Durable队列必须用如上的方式,设置x-max-priority属性,否则rabbitmq-server服务会crash 参考技术A channel.queueUnbind(queue, exchange, routing_key);
是否有别的更好的方法?

rabbitMQ:Fanout Exchange

技术图片

任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。

1.可以理解为路由表的模式

2.这种模式不需要RouteKey

3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。

4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

 

以上是关于rabbitmq 服务端 exchange怎么绑定queue的主要内容,如果未能解决你的问题,请参考以下文章

消息中间件——RabbitMQ理解Exchange交换机核心概念!

理解 RabbitMQ Exchange

rabbitMQ:Fanout Exchange

RabbitMQ 概念

rabbitmq概念

关于Rabbitmq的routingkey的作用