在使用RMQ
的时候有两个非常重要的方法(基于Java客户端实现amqp-client
):
exchangeDeclare
:声明一个交换机。queueDeclare
:声明一个队列。
生产者和消费者都可以声明一个交换机或者队列。
如果尝试声明一个已经存在的交换机或者队列,只要声明的参数完全匹配现存的交换机或者队列,RabbitMQ 就可以什么都不做,并成功返回;如果声明的参数不匹配,则会抛出异常。
1 exchangeDeclare
1.1 声明exchange
用于声明一个交换机,函数签名如下:
Exchange.DeclareOk exchangeDeclare(String exchange,
String type,
boolean durable,
boolean autoDelete,
boolean internal,
Map<String, Object> arguments) throws IOException;
参数说明:
exchange
:指定交换机的名称。type
:指定交换机的类型(fanout
、direct
、topic
、headers
)。durable
:是否持久化。如果设置为true
,则rabbitmq
会将exchange
信息保存到磁盘,服务器重启后exchange
不会丢失。autoDelete
:是否自动删除。如果设置为true
,则当这个exchange
不在被使用的时候,rabbitmq
就会将它删除。- 自动删除的前提是:至少有一个队列或者交换机与这个交换机绑定,之后所有与这个交换机绑定的队列或者交换机都与之解绑,则这个交换机会被自动删除。 注意不能错误地把这个参数理解为:当与此交换机连接的客户端都断开时,
RabbitMQ
会自动删除本交换器。
- 自动删除的前提是:至少有一个队列或者交换机与这个交换机绑定,之后所有与这个交换机绑定的队列或者交换机都与之解绑,则这个交换机会被自动删除。 注意不能错误地把这个参数理解为:当与此交换机连接的客户端都断开时,
internal
:是否内置的。如果设置为true
,则这个exchange
就是一个内置交换机,不能直接通过客户端程序发送消息到这个交换机ÿ