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

克拉玛依市网站建设_网站建设公司_全栈开发者_seo优化

seo网站推广服务,网页设计教学网站,深圳高端建设网站,wordpress响应案例在[八]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.ihoyoo.com/news/138570.html

相关文章:

  • 做网站 怎么样找客户app开发软件多少钱
  • 网站对接appvs2015做简单网站
  • 网站建设改变某个表格大小优秀网站seo报价
  • 开鲁网站seo免费版网站专题制作原则
  • 大濮网最新濮阳消息seo上海推广公司
  • 涪城网站建设网站密码怎么做
  • 企业wap网站源码外贸网站cms系统
  • 怎么做免费的宣传网站做网站在哪买域名
  • 渭南网站建设与维护前端开发和后端开发哪个好些
  • 期末作业制作网站室内设计联盟官方app
  • 网页制作网站发布教学设计数字营销专业学什么
  • 建立自己网站北京广告设计公司招聘
  • 网站建设月薪武昌做网站公司推荐
  • 那些网站可以做公司的推广莱芜网站优化方案
  • 天津做企业网站公司2021重大军事新闻
  • wordpress门户网站天津关键词优化网排名
  • 上海想找人设计网站外网服务器租用
  • 重庆网站排名外包wordpress 小工具原理
  • 有专业做网站的吗网站公司做网站都需要什么工具
  • 网站可以自己做服务器么利用海康威视做直播网站
  • 国外网站 工信部备案谷歌浏览器官网
  • 莆田个人外贸网站建设wordpress 添加文件夹
  • wordpress站点地址没有湖南微网站开发
  • 网站的流量是怎么算的我的世界服务器网站怎么做
  • 做网站买服务器大概多少钱如何推广一个公众号
  • 物流网站建设工作岗位为什么网站上传都上传不成功
  • 贺州招聘网站建设柳州网站定制
  • 织梦网站地图模板修改icp ip 网站备案查询
  • 福建建设人才网站甜品店网站建设
  • 在中国建的网站google可收录吗建设网站租服务器