rabbitMQ exchangeDeclare,queueDeclare,queueBind,exchangeBind

  1.  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;
  2. 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 将队列设置为主位置模式,确定在节点集群上声明时队列主机所在的规则。

     

  3. 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;
    

     

  4. 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;
    
    

     

  5. 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 参数无效。
 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值