-
exchangeDeclare : 交换器的设置
/** * * @param exchange 交换器名称 * @param type 交换器类型:topic direct等 * @param durable 是否持久化交换器 * @param autoDelete 是否自动删除交交换器 当所有与此交换器绑定的队列与此交换器解绑 此交换器自动删除 * @param internal 是否为内置交换器 如果设置为内置,客户端程无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这种方式。 * @param arguments 队列的一些属性 * @return * @throws IOException */ Exchange.DeclareOk exchangeDeclare(String exchange, String type, boolean durable, boolean autoDelete, boolean internal, Map<String, Object> arguments) throws IOException;
- queueDeclare:队列的设置
/** * Declare a queue * @see com.rabbitmq.client.AMQP.Queue.Declare * @see com.rabbitmq.client.AMQP.Queue.DeclareOk * @param queue 队列名称 * @param durable 是否持久化 * @param exclusive 是否独占,为true则设置为独占队列,独占该队列仅对首次声明它的连接可见,并在连接断开时自动删除。 * @param autoDelete 是否自动删除,至少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会删除 * @param arguments 队列的一些属性 * @return a declaration-confirm method to indicate the queue was successfully declared * @throws java.io.IOException if an error is encountered */ Queue.DeclareOk queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) throws IOException;
agruments:
x-message-ttl 消息在队列中可以存活的时间超过会被丢弃(毫秒)。 x-expires 队列可以存活的时间设置为1000 队列1秒未被使用会被删除(毫秒)。 x-max-length 消息队列最大长度。 x-max-length-bytes 消息队列的容积。 x-dead-letter-exchange 死信队列如果队列中的消息过期被删除会被重新发布到交换器exchange x-dead-letter-routing-key 死信队列的路邮键 x-max-priority 队列支持的最大优先级数;如果未设置,队列将不支持消息优先级。 x-queue-mode 把消息尽可能的都保存在磁盘上,仅在消费者请求的时候才会加载到RAM中。 x-queue-master-locator 将队列设置为主位置模式,确定在节点集群上声明时队列主机所在的规则。
- queueBind:绑定队列
/** * Bind a queue to an exchange. * @see com.rabbitmq.client.AMQP.Queue.Bind * @see com.rabbitmq.client.AMQP.Queue.BindOk * @param queue 队列名称 * @param exchange 交换器名称 * @param routingKey 路由键 * @param arguments 定义绑定的参数 * @return a binding-confirm method if the binding was successfully created * @throws java.io.IOException if an error is encountered */ AMQP.Queue.BindOk queueBind(String queue, String exchange, String routingKey, Map<String, Object> arguments) throws IOException;
- exchangeBind:交换机的绑定
/** 交换器绑定和队列绑定差不多 * Bind an exchange to an exchange. * @see com.rabbitmq.client.AMQP.Exchange.Bind * @see com.rabbitmq.client.AMQP.Exchange.BindOk * @param destination 需要订阅的交换器 * @param source 被绑定的交换器 * @param routingKey 路邮键 * @param arguments 定义绑定的参数 * @return a binding-confirm method if the binding was successfully created * @throws java.io.IOException if an error is encountered */ Exchange.BindOk exchangeBind(String destination, String source, String routingKey, Map<String, Object> arguments) throws IOException;
-
basicPublish
mandatory参数已经被废弃了
/** * Publish a message. * * Invocations of <code>Channel#basicPublish</code> will eventually block if a * <a href="https://www.rabbitmq.com/alarms.html">resource-driven alarm</a> is in effect. * * @see com.rabbitmq.client.AMQP.Basic.Publish * @see <a href="https://www.rabbitmq.com/alarms.html">Resource-driven alarms</a> * @param exchange 交换器 * @param routingKey 路邮键 * @param mandatory 1.为true 生产者根据交换器和路邮键找不到符合条件的队列rabbitMQ会把消息返回给生产者。 * 可以用channel.addReturnListener监听rabbitMQ返回的消息 * 2.为false 时生产者如果找不到符合的队列消息会被直接丢弃。 * RabbitMQ 3.0版本开始去掉了对 imrnediate 参数的支持RabbitMQ官方解释是: imrnediate 参数会影响镜像队列的性能 * 增加代码负载型 建议采用 TTL 和 DLX 的方法替 * @param props 一些参数 BasicProperties * @param body 需要发送的消息 * @throws java.io.IOException if an error is encountered */ void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body)
BasicProperties :RabbitMQ提供了工具类 MessageProperties.PERSISTENT_TEXT_PLAIN
/** * * @param contentType 编码类型 * @param contentEncoding 编码 * @param headers 头信息 * @param deliveryMode 是否持久化,1 - 不持久化,2 - 持久化 * @param priority 消息等级 * @param correlationId 关联id * @param replyTo 用于指定回复的队列的名称 * @param expiration 消息的失效时间 * @param messageId 消息的ID * @param timestamp 消息的时间戳 * @param type 类型 * @param userId 用户id * @param appId * @param clusterId */ public BasicProperties(String contentType, String contentEncoding, Map<String, Object> headers, Integer deliveryMode, Integer priority, String correlationId, String replyTo, String expiration, String messageId, Date timestamp, String type, String userId, String appId, String clusterId) {
备份队列
alternate-exchange属性:备份交换器
生产者推送失败的消息会进入到备份交换器backup-exchange
Map<String, Object> arguments = new HashMap<>(16);
arguments.put("alternate-exchange", "backup-exchange");
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, arguments);
果备份交换器和 mandatory 参数一起使用,那么 mandatory 参数无效。
/**
* @param prefetchSize 可接受的消息总量大小(就是未ack的消息达到了这个配置就不能再接收下消息)
* @param prefetchCount 可接受的消息个数(就是未ack的消息达到了这个配置就不能再接收下消息)
* @param global 是否当前channel全局使用 (如果不是全局)
* @throws java.io.IOException if an error is encountered
*/
void basicQos(int prefetchSize, int prefetchCount, boolean global) throws IOException;
客户端 当前所有消费者 可接受消息数量为10
channel . basicQos(10) ;
channel.basicConsume( "my-queue1 ", false , consumer1);
channel.basicConsume( "my-queue2", false , consumer2);
channel . basicQos(10) ;
客户端 basicQos(6,false) 与 basicQos(10,true) 是并且的关系。
channel . basicQos(6,false) ; // 表示每个客户端最多接收6个消息
channel . basicQos(10,true) ; // 所有客户端总共接收10个消息
channel.basicConsume( "my-queue1 ", false , consumer1);
channel.basicConsume( "my-queue2", false , consumer2);
alternate-exchange属性:备份交换器
生产者推送失败的消息会进入到备份交换器backup-exchange
Map<String, Object> arguments = new HashMap<>(16);
arguments.put("alternate-exchange", "backup-exchange");
channel.exchangeDeclare(EXCHANGE_NAME, "direct", true, false, arguments);
果备份交换器和 mandatory 参数一起使用,那么 mandatory 参数无效。