赞
踩
在上节 WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)中我们已经简单介绍了各种目的地类型,如下图:
这一节我们来详细探讨一下各种目的地类型的区别。
在MESSAGE
报文中请求头destination
的格式如下:
/queue/queue_name
。amp.topic
交换机的消息目的地格式为:topic/routing_key
。/exchange/exchange_name/routing_key
。如果队列名、交换机名、路由key包含了/
、%
或者非ascii
字符,这些字符将会被替换为%dd
,dd
的意思是16进制编码。
任何exchange/queue或者exchange/routing-key的组合都可以通过前缀为/exchange
的目的地来访问。
对于SUBSCRIBE命令,目的地格式为:/exchange/<name>[/<pattern>]
,格式说明如下:
name
交换机上创建一个排它,自动删除的队列。<pattern>
有指定,则以<pattern>
为路由key绑定到名称为name
的交换机上。对于SEND命令,目的地格式为:/exchange/<name>[/<routing-key>]
,格式说明如下:
<routing-key>
发送消息到名称为name
的交换机上。备注:Exchange类型的目的地不适用于从已存在的队列消费信息。对于每个订阅者都会创建一个新的队列,并且通过指定的路由key绑定到指定的交换机。如果要消费已存在队列的消息,可以使用
/amq/queue
目的地。
对于简单队列,目的地格式为/queue/<name>
。
Queue类型目的地只会把消息传递给最多一个订阅者,发送的消息如果没有消费者订阅将会一直入队,直到订阅者进行消费。
name
的队列。name
的共享队列会在第一次发送消息到该类型的目的地时创建,消息将会根据路由keyname
发送到默认交换机上。如果要发送或者订阅不由STOMP适配器管理的已存在队列的消息,消息目的地格式为/amq/queue/<name>
,说明如下:
name
的队列上。name
的队列订阅会基于当前STOMP会话建立。备注:如果没有指定任何队列参数,队列将会被认定持久、非排它、非自动删除。
STOMP客户端用的最多的目的地类型就是/topic/<name>
,该类型的目的地可以路由消息到多个订阅者,发送到Topic类型目的地的消息如果没有订阅者订阅,将会被丢弃。
关于Topic类型目的地的格式说明如下:
<name>
发送到amp.topic
交换机上。<name>
绑定到amp.topic
交换机上。可以通过stomp.default_topic_exchange
参数可以修改默认Topic交换机的名称,如下:
stomp.default_topic_exchange = some.exchange
更多关于目的地类型的说明可以参考:RabbitMQ STOMP插件说明。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。