RabbitMQ客户端源码分析(九)之RPC请求响应

声明

  1. Queue声明、exchange声明、bind等,这些都是通过同步RPC调用

    
              
        channel.queueDeclare(queueName, durable, exclusive, autoDelete, null);
        channel.exchangeDeclare(exchange, "direct", true);  
        channel.queueBind(queueName, exchange, bindingKey);
    

发送声明数据

  1. queueDeclare:声明队列,调用的方法嵌套比较多
    rp-w489

  2. 核心调用流程

     校验队列名长度——>构建Declare数据——>RPC同步阻塞调用,直到响应数据返回
    
  3. validateQueueNameLength:从这里可以看到,队列名字的长度最大为255

        private static void validateQueueNameLength(String queue) {
         
            if(queue.length() > 255) {
         
               throw new IllegalArgumentException("queue name must be no more than 255 characters long");
            }
        }
    
    
  4. privateRpc:创建Future对象,调用rpc方法发送数据给服务端。k.getReply()阻塞等待直到connection.startMainLoop()启动的读线程读取到服务端返回的数据为止。

        private AMQCommand privateRpc(Method m)
            throws IOException, ShutdownSignalException
        {
         
            //封装BlockingValueOrException
            SimpleBlockingRpcContinuation k = new SimpleBlockingRpcContinuation();
            rpc(m, k);
            // At this point, the request method has been sent, and we
            // should wait for the reply to arrive.
            //
            // Calling getReply() on the continuation puts us to sleep
            // until the connection's reader-thread throws the reply over
            // the fence.
            return k.getReply();
        }
        
        public void rpc(Method m, RpcContinuation k)
        throws IOException {
         
            synchronized (_channelMutex) {
         
                ensureIsOpen();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值