AMQP有个默认交换机类型,它实际是direct交换机,只不过没有名字。它是由broker预先定义好的。它有个非常有用的特性,每个队列自动绑定到它,使用的routing key就是队列的名字。
例如,当你声明一个名为”search.indexing.online”的队列,但没有调用bind()与交换机绑定,broker会将它绑定到默认交换机,并使用”search.indexing.online”队列名作为routing key. 这样,发往默认交换机的消息,使用routing key=”search.indexing.online”,将会路由到同名队列。换句话说,默认交换机看起来是直接投递消息到队列,虽然技术实现上并不是这样。
在AMQP库里,声明一个默认交换机:
exchange = channel.default_exchange # or exchange = channel.direct("")
消息消费:
channel = AMQP::Channel.new(connection) channel.queue("search.indexing.online", :auto_delete => true).subscribe do |payload| puts "Received a message: #{payload}. Disconnecting..."
消息投递:
channel.direct("").publish "Hello, world!", :routing_key => "search.indexing.online"