客户端API严格按照AMQP 0-9-1协议规范进行建模,并提供了易于使用的附加抽象。
RabbitMQ Java客户端使用com.rabbitmq.client做为其顶层包。关键的类和接口是:java
协议操做可经过Channel接口得到。Connection用于打开通道,注册链接生命周期事件处理程序,并关闭再也不须要的链接。 链接是经过ConnectionFactory实例化的,这就是你如何配置各类链接设置,如虚拟主机或用户名。api
import com.rabbitmq.client.Connection; import com.rabbitmq.client.Channel;
如下代码使用给定的参数(主机名,端口号等)链接到AMQP代理:服务器
ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(userName); factory.setPassword(password); factory.setVirtualHost(virtualHost); factory.setHost(hostName); factory.setPort(portNumber); Connection conn = factory.newConnection();
全部这些参数都对本地运行的RabbitMQ服务器具备合理的默认值。函数
或者,可使用URI:代理
ConnectionFactory factory = new ConnectionFactory(); factory.setUri("amqp://userName:password@hostName:portNumber/virtualHost"); Connection conn = factory.newConnection();
全部这些参数都对本地运行的RabbitMQ服务器有合理的默认值。code
而后接口能够用于打开一个通道:对象
Channel channel = conn.createChannel();
如今可使用该通道发送和接收消息,如后面的部分所述。接口
要断开链接,只需关闭通道和链接:生命周期
channel.close(); conn.close();
客户端应用程序与AMQP的高级构建块交换和排队。这些必须被“声明”才可使用。声明任何一种类型的对象只是确保其中一个名称存在,若是有必要的话建立它。rabbitmq
继续前面的例子,下面的代码声明一个Exchange和一个Queue,而后将它们绑定在一块儿。
channel.exchangeDeclare(exchangeName, "direct", true); String queueName = channel.queueDeclare().getQueue(); channel.queueBind(queueName, exchangeName, routingKey);
这将主动声明如下对象,这两个对象均可以使用附加参数进行定制。这里他们都没有任何特别的论点。
上面的函数调用而后用给定的路由密钥将队列绑定到交换机上。
请注意,这将是一个典型的方式来声明一个队列,当只有一个客户端想要使用它:它不须要一个众所周知的名称,没有其余客户端可使用它(独占),将自动清理(自动删除)。若是有几个客户想共享一个知名名字的队列,这个代码将是合适的:
channel.exchangeDeclare(exchangeName, "direct", true); channel.queueDeclare(queueName, true, false, false, null); channel.queueBind(queueName, exchangeName, routingKey);
这将主动宣布:
请注意,全部这些Channel API方法都被重载。这些便捷的exchangeDeclare,queueDeclare和queueBind 使用合理的默认值。还有更多的参数更多的形式,让你根据须要重写这些默认值,在须要的地方给予彻底控制。
这个“短形式,长形式”模式在整个客户端API使用。