当前位置: 首页 > news >正文

网站排名易下拉排名深圳优秀网站建设公司

网站排名易下拉排名,深圳优秀网站建设公司,佛山手工外发加工网,网站须知在[八]RabbitMQ-客户端源码之ChannelN中讲述basicConsume的方法时设计到Consumer这个回调函数#xff0c;Consumer其实是一个接口#xff0c;真正实现它的是QueueingConsumer和DefaultConsumer#xff0c;且DefaultConsumer是QueueingConsumer的父类#xff0c;里面都是空方… 在[八]RabbitMQ-客户端源码之ChannelN中讲述basicConsume的方法时设计到Consumer这个回调函数Consumer其实是一个接口真正实现它的是QueueingConsumer和DefaultConsumer且DefaultConsumer是QueueingConsumer的父类里面都是空方法。在用户使用时可以简单的采用QueueingConsumer或者采用DefaultConsumer来重写某些方法。 这里先来看下消费者客户端的关键代码 QueueingConsumer consumer new QueueingConsumer(channel);channel.basicQos(32);channel.basicConsume(QUEUE_NAME, false, consumer_zzh,consumer)while (true) {QueueingConsumer.Delivery delivery consumer.nextDelivery();String message new String(delivery.getBody());System.out.println( [X] Received message );channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);} 可以看到QueueingConsumer作为channel.basicConsume的回调函数之后再进行处理。 在AMQConnection中有关MainLoop的主线程专门用来”第一线”的处理Broker发送回客户端从帧。当Basic.Consume/.ConsumeOk开启消费模式之后Broker主动的向客户端发送Basic.Delivery帧MainLoop线程一步步的调用最后到ChannelN的processAsync()方法中有 if (method instanceof Basic.Deliver) {processDelivery(command, (Basic.Deliver) method);return true; } 之后调用processDelivery方法 protected void processDelivery(Command command, Basic.Deliver method) {Basic.Deliver m method;Consumer callback _consumers.get(m.getConsumerTag());if (callback null) {if (defaultConsumer null) {throw new IllegalStateException(Unsolicited delivery - see Channel.setDefaultConsumer to handle this case.);}else {callback defaultConsumer;}}Envelope envelope new Envelope(m.getDeliveryTag(), m.getRedelivered(),m.getExchange(),m.getRoutingKey());try {this.dispatcher.handleDelivery(callback, m.getConsumerTag(),envelope, (BasicProperties) command.getContentHeader(),command.getContentBody());} catch (Throwable ex) {getConnection().getExceptionHandler().handleConsumerException(this, ex,callback,m.getConsumerTag(), handleDelivery);} } 这个方法首先根据consumerTag从ChannelN中的_consumer这个HashMap中获取相应的Consumer回调函数然后调用这个回调函数的handleDeliver()方法进行处理这里有些同学会有疑问明明是调用ConsumerDispatcher dispatcher的handleDeliver()方法其实这里只是包了一层皮ConsumerDispatcher的handleDeliver()方法就是调用了Consumer的handleDeliver()方法。 我们接下去看看QueueingConsumer这个实现Consumer接口的类是怎么处理的 Override public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body)throws IOException {checkShutdown();this._queue.add(new Delivery(envelope, properties, body)); } 这里的queue就是一个LinkedBlockingQueue客户端程序通过调用nextDelivery()方法来获取数据 public Delivery nextDelivery()throws InterruptedException, ShutdownSignalException, ConsumerCancelledException {return handle(_queue.take()); }private Delivery handle(Delivery delivery) {if (delivery POISON ||delivery null (_shutdown ! null || _cancelled ! null)) {if (delivery POISON) {_queue.add(POISON);if (_shutdown null _cancelled null) {throw new IllegalStateException(POISON in queue, but null _shutdown and null _cancelled. This should never happen, please report as a BUG);}}if (null ! _shutdown)throw Utility.fixStackTrace(_shutdown);if (null ! _cancelled)throw Utility.fixStackTrace(_cancelled);}return delivery; } 这个nextDelivery方法说白就是一个LinkedBlockingQueue的take()操作也就是一个可能会阻塞等待的操作。 附本系列全集 [Conclusion]RabbitMQ-客户端源码之总结[一]RabbitMQ-客户端源码之ConnectionFactory[二]RabbitMQ-客户端源码之AMQConnection[三]RabbitMQ-客户端源码之ChannelManager[四]RabbitMQ-客户端源码之Frame[五]RabbitMQ-客户端源码之AMQChannel[六]RabbitMQ-客户端源码之AMQCommand[七]RabbitMQ-客户端源码之AMQPImplMethod[八]RabbitMQ-客户端源码之ChannelN[九]RabbitMQ-客户端源码之Consumer
http://www.pierceye.com/news/977037/

相关文章:

  • 珠海建网站多少钱网站月流量
  • 彩网站开发购物小程序源码
  • 优秀的网站建设开发案例合肥备案
  • 做网站怎么签订协议大数据下的精准营销
  • wordpress模版建站城乡建设部网站施工员证书查询
  • 手机网站前端网站开发成本包括
  • 有了主机和域名后如何做网站seo网站建站公司的主页
  • 株洲网站制作360广告联盟平台
  • 网站pv是什么意思vps开wordpress
  • 国外网站模版免费下载南通建设网站公司
  • 网站建设 广西学3d建模学费一般多少
  • 整站外包优化公司金山西安网站建设
  • 做3d动画网站广州公关公司排行榜
  • 网站开发确认表seo技术教程博客
  • 彩票网站建设一条龙淘客app
  • 泰安网站推广优化网站百度收录是什么意思
  • 免费虚拟主机控制面板长沙推广优化公司
  • 重庆企业网站建站公司建站系统
  • 规划设计网站推荐自己做采集电影网站
  • 免费学编程的网站有哪些做网站设计用什么软件
  • 网站成品超市学室内设计去哪好
  • 网站备案一个主体无锡建设银行网站
  • delphi xe10网站开发台州做网站多少钱
  • 怎样设计卖奖的网站做电影网站哪个服务器好
  • 找外包公司做网站的好处和坏处wordpress 访问量大
  • 淄博 网站设计越秀公司网站建设
  • 网站该如何做本地网站搭建软件
  • 如何做汽车团购网站学做馒头面包哪个网站好
  • 中国科技成就总结莱芜网站优化排名公司
  • 中国建设银行网站企业网银收费北京网站建设小程序开发