游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

干货!基于SpringBoot的RabbitMQ多种模式队列

  环境准备安装RabbitMQ
  由于RabbitMQ的安装比较简单,这里不再赘述。可自行到官网下载http:www。rabbitmq。comdownload。html依赖
  SpringBoot项目导入依赖dependencygroupIdorg。springframework。bootgroupIdspringbootstarteramqpartifactIddependency连接配置
  配置文件添加如下配置(根据自身情况修改配置)spring。rabbitmq。host127。0。0。1spring。rabbitmq。port5672spring。rabbitmq。usernameguestspring。rabbitmq。passwordguestspring。rabbitmq。virtualhostacelin
  五种队列模式实现1点对点的队列
  在java配置文件DirectRabbitConfig中先声明一个队列用于接收信息publicstaticfinalStringPEERTOPEERQUEUEpeertopeerqueue;点对点队列PeertopeerBeanpublicQueuepeer2peerQueue(){returnnewQueue(PEERTOPEERQUEUE,true);}
  创建一个消费者类Peer2PeerConsumers。用RabbitListener对声明的队列进行监听ComponentpublicclassPeer2PeerConsumersextendsBase{RabbitListener(queuesDirectRabbitConfig。PEERTOPEERQUEUE)publicvoidconsumer2(ObjecttestMessage){logger。debug(peertopeer消费者收到消息:testMessage。toString());}}
  创造一个消息生产者。在编码形式上,直接把消息发发送给接收的消息队列【点对点模式】paramtask消息内容PostMapping(peertopeer{task})publicStringpeerToPeer(PathVariable(task)Stringtask){rabbitTemplate。convertAndSend(DirectRabbitConfig。PEERTOPEERQUEUE,task);returnok;}
  启动项目。队列绑定到默认交换机
  调用生产者接口产生消息,可看到的消费者立即接收到信息peertopeer消费者收到消息:(Body:himqMessageProperties〔headers{},contentTypetextplain,contentEncodingUTF8,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchange,receivedRoutingKeypeertopeerqueue,deliveryTag1,consumerTagamq。ctagvuKWCYLNLn3GwRJKJO5Mg,consumerQueuepeertopeerqueue〕)
  这里要说明一点的是,点对点模式虽然编码形式只与队列交互,但其本质上还是要跟交换机交互的,本质跟下面要介绍的路由模式其实是一样的。
  查看convertAndSend方法的源码,可以看到我们虽然没有进行交换机和队列的绑定,发送消息是也没指定交换机,但是程序会为我们绑定默认的交换机。Thedefaultexchangeisimplicitlyboundtoeveryqueue,witharoutingkeyequaltothequeuename。Itisnotpossibletoexplicitlybindto,orunbindfromthedefaultexchange。Italsocannotbedeleted。
  默认交换机会隐式绑定到每个队列,路由键等于队列名称。我们无法明确绑定到默认交换机或从默认交换中解除绑定。它也无法删除。
  且我们第一个参数传递的是队列的名称,但实际上程序是以这个名字作为路由,将同名队列跟默认交换机做绑定。所以的消息会根据该路由信息,通过默认交换机分发到同名队列上。(我们通过接收的信息receivedRoutingKeypeertopeerqueue和consumerQueuepeertopeerqueue也可以看的出来)
  2工作队列模式WorkQueue
  在java配置文件DirectRabbitConfig中先声明一个工作队列publicstaticfinalStringWORKQUEUEworkqueue;工作队列WorkQueueBeanpublicQueueworkQueue(){returnnewQueue(WORKQUEUE,true);}
  创建一个消费者类WorkConsumers。同样用RabbitListener对声明的队列进行监听ComponentpublicclassWorkConsumersextendsBase{RabbitListener(queuesDirectRabbitConfig。WORKQUEUE)publicvoidconsumer1(ObjecttestMessage){logger。debug(work消费者〔1〕收到消息:testMessage。toString());}RabbitListener(queuesDirectRabbitConfig。WORKQUEUE)publicvoidconsumer2(ObjecttestMessage){logger。debug(work消费者〔2〕收到消息:testMessage。toString());}}
  创造一个消息生产者。在编码形式上,直接把消息发发送给接收的消息队列【工作队列模式】paramtask消息内容PostMapping(work{task})publicStringsendWorkMessage(PathVariable(task)Stringtask){rabbitTemplate。convertAndSend(DirectRabbitConfig。WORKQUEUE,task);returnok;}
  启动项目,同样的,工作队列也是绑定到默认交换机。
  调用生产者接口连续发送几次消息,可看到两个消费者竞争对队列消息进行消费,一条消息只被一个消费者消费,不会出现重复消费的情况,因此工作队列模式也被称为竞争消费者模式。work消费者〔1〕收到消息:(Body:task1MessageProperties〔headers{},contentTypetextplain,contentEncodingUTF8,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchange,receivedRoutingKeyworkqueue,deliveryTag1,consumerTagamq。ctagPUYjfVq56aEn7a9DzLNzQ,consumerQueueworkqueue〕)work消费者〔2〕收到消息:(Body:task2MessageProperties〔headers{},contentTypetextplain,contentEncodingUTF8,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchange,receivedRoutingKeyworkqueue,deliveryTag1,consumerTagamq。ctag1IVtDalFUCKVvYpFrGF8A,consumerQueueworkqueue〕)work消费者〔1〕收到消息:(Body:task3MessageProperties〔headers{},contentTypetextplain,contentEncodingUTF8,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchange,receivedRoutingKeyworkqueue,deliveryTag2,consumerTagamq。ctagPUYjfVq56aEn7a9DzLNzQ,consumerQueueworkqueue〕)work消费者〔2〕收到消息:(Body:task4MessageProperties〔headers{},contentTypetextplain,contentEncodingUTF8,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchange,receivedRoutingKeyworkqueue,deliveryTag2,consumerTagamq。ctag1IVtDalFUCKVvYpFrGF8A,consumerQueueworkqueue〕)
  事实上,竞争消费者模式本质就是多个消费者对同一个队列消息进行消费。另外,与点对点模式一样,工作队列模式的也是用到了默认交换机进行消息分发。因此于基于的Direct交换机的路由模式的原理本质上都是一样的,因此,某种程度上,我们也可以用路由模式实现工作队列模式,这点我们下面介绍路由模式再进行展开
  3路由模式Routing
  在java配置文件DirectRabbitConfig中先声明2个队列和一个direct类型的交换机,然后将队列1和与交换机用一个路由键1进行绑定,队列2用路由键2与队列进行绑定publicstaticfinalStringDIRECTQUEUEONEdirectQueue1;Direct队列名称1publicstaticfinalStringDIRECTQUEUETWOdirectQueue2;Direct队列名称2publicstaticfinalStringMYDIRECTEXCHANGEmyDirectExchange;Direct交换机名称publicstaticfinalStringROUTINGKEYONEdirect。routingkey1;direct路由标识1publicstaticfinalStringROUTINGKEYONEdirect。routingkey2;direct路由标识2DirectBeanpublicQueuedirectQueueOne(){returnnewQueue(DIRECTQUEUEONE,true);}BeanpublicQueuedirectQueueTwo(){returnnewQueue(DIRECTQUEUETWO,true);}BeanpublicDirectExchangedirectExchange(){returnnewDirectExchange(MYDIRECTEXCHANGE,true,false);}BeanpublicBindingbindingDirectOne(){returnBindingBuilder。bind(directQueueOne())。to(directExchange())。with(ROUTINGKEYONE);}BeanpublicBindingbindingDirectTwo(){returnBindingBuilder。bind(directQueueTwo())。to(directExchange())。with(ROUTINGKEYTWO);}
  创建一个消费者类DirectConsumers。在每个消费者上,我们用3个消费者注解RabbitListener对声明的队列进行监听。消费者1和3监听队列1,消费者2监听队列2ComponentpublicclassDirectConsumersextendsBase{RabbitListener(queuesDirectRabbitConfig。DIRECTQUEUEONE)publicvoidconsumer1(ObjecttestMessage){logger。debug(Direct消费者〔1〕收到消息:testMessage。toString());}RabbitListener(queuesDirectRabbitConfig。DIRECTQUEUETWO)publicvoidconsumer2(ObjecttestMessage){logger。debug(Direct消费者〔2〕收到消息:testMessage。toString());}RabbitListener(queuesDirectRabbitConfig。DIRECTQUEUEONE)publicvoidconsumer3(ObjecttestMessage){logger。debug(Direct消费者〔3〕收到消息:testMessage。toString());}}
  创造一个消息生产者。发送消息时,带上路由键1信息【Direct路由模式】parammessage消息内容PostMapping(direct{message})publicStringsendDirectMessage(PathVariable(message)Stringmessage){MapString,ObjectmapnewHashMap();map。put(messageId,String。valueOf(UUID。randomUUID()));map。put(messageData,message);设置路由标识MYROUTINGKEY,发送到交换机MYDIRECTEXCHANGErabbitTemplate。convertAndSend(DirectRabbitConfig。MYDIRECTEXCHANGE,DirectRabbitConfig。ROUTINGKEYONE,map);returnok;}
  启动项目,查看该交换机的绑定情况
  发送多条信息,可以看到,由于队列2没有通过路由键1跟交换机进行绑定,所以对于监控队列2的消费者2,其无法结束到的带有路由键1的消息,而消费者1和3则竞争消费队列1的消息Direct消费者〔3〕收到消息:(Body:{messageId54682b16014246afbe0c1156df1f27a7,messageDatamsg1}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyDirectExchange,receivedRoutingKeydirect。routingkey1,deliveryTag15,consumerTagamq。ctagCsuZL9KKByH9IDtqTKefg,consumerQueuedirectQueue1〕)Direct消费者〔1〕收到消息:(Body:{messageId66cd296a9a6044588e8772ed13f9964b,messageDatamsg2}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyDirectExchange,receivedRoutingKeydirect。routingkey1,deliveryTag2,consumerTagamq。ctaghWmdY04YuLL0O2rgeSlxsw,consumerQueuedirectQueue1〕)Direct消费者〔3〕收到消息:(Body:{messageId48c0830e220747ecbd3ea958fec48118,messageDatamsg3}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyDirectExchange,receivedRoutingKeydirect。routingkey1,deliveryTag16,consumerTagamq。ctagCsuZL9KKByH9IDtqTKefg,consumerQueuedirectQueue1〕)
  我们如果对新增一个队列3,通过路由键1与交换机进行绑定,消费者独立监听队列3,那么我们不难猜到,队列3将和队列1同样拿到一条消息,相当于广播的概念,但我们会发现如果要这么做,似乎路由键无足轻重,因此rabbitmq提供了一种特殊的交换机来处理这种场景,不需要路由键的参与。我们接着往下看
  4发布订阅模式PublishSubscribe
  在java配置文件DirectRabbitConfig中先声明Fanout交换机和两队列,并将两个队列与该交换机进行绑定publicstaticfinalStringMYFANOUTEXCHANGEmyFanoutExchange;Fanout交换机名称publicstaticfinalStringFANOUTQUEUEONEfanoutqueue1;Fanout队列名称1publicstaticfinalStringFANOUTQUEUETWOfanoutqueue2;Fanout队列名称2FanoutBeanpublicQueuefanoutQueueOne(){returnnewQueue(FANOUTQUEUEONE,true);}BeanpublicQueuefanoutQueueTwo(){returnnewQueue(FANOUTQUEUETWO,true);}BeanpublicFanoutExchangefanoutExchange(){returnnewFanoutExchange(MYFANOUTEXCHANGE,true,false);}BeanpublicBindingbindingFanoutOne(){returnBindingBuilder。bind(fanoutQueueOne())。to(fanoutExchange());}BeanpublicBindingbindingFanoutTwo(){returnBindingBuilder。bind(fanoutQueueTwo())。to(fanoutExchange());}
  创建一个消费者类FanoutConsumers。创建两个消费者,分表对两个队列进行监听ComponentpublicclassFanoutConsumersextendsBase{RabbitListener(queuesDirectRabbitConfig。FANOUTQUEUEONE)publicvoidconsumer1(ObjecttestMessage){logger。debug(FANOUT消费者〔1〕收到消息:testMessage。toString());}RabbitListener(queuesDirectRabbitConfig。FANOUTQUEUETWO)publicvoidconsumer2(ObjecttestMessage){logger。debug(FANOUT消费者〔2〕收到消息:testMessage。toString());}}
  创造一个消息生产者。将消息发送给Fanout交换机【工作队列模式】paramtask消息内容PostMapping(work{task})publicStringsendWorkMessage(PathVariable(task)Stringtask){rabbitTemplate。convertAndSend(DirectRabbitConfig。WORKQUEUE,task);returnok;}
  启动项目,我们可以看到交换机与两个队列进行了绑定,但是路由键那一栏是空的。
  发送两条消息。【Fanout发布订阅模式】parammessage消息内容PostMapping(fanout{message})publicStringsendFanoutMessage(PathVariable(message)Stringmessage){MapString,ObjectmapnewHashMap();map。put(messageId,String。valueOf(UUID。randomUUID()));map。put(messageData,message);直接跟交换机MYFANOUTEXCHANGE交互rabbitTemplate。setExchange(DirectRabbitConfig。MYFANOUTEXCHANGE);rabbitTemplate。convertAndSend(map);returnok;}
  可以看到,两个消费者都拿到了同样的数据,达到了广播的效果。FANOUT消费者〔2〕收到消息:(Body:{messageIda4bf19311db84cb98b01397f43a82660,messageDataHiFanout}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyFanoutExchange,receivedRoutingKey,deliveryTag1,consumerTagamq。ctagncVmsRM7xHLZ0iAJT2tSTg,consumerQueuefanoutqueue2〕)FANOUT消费者〔1〕收到消息:(Body:{messageIda4bf19311db84cb98b01397f43a82660,messageDataHiFanout}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyFanoutExchange,receivedRoutingKey,deliveryTag1,consumerTagamq。ctagzR3Oi0MVESq8qushlAMa3Q,consumerQueuefanoutqueue1〕)FANOUT消费者〔1〕收到消息:(Body:{messageId51f6672035dd4abf9d3324acf7786ed8,messageData666}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyFanoutExchange,receivedRoutingKey,deliveryTag2,consumerTagamq。ctagzR3Oi0MVESq8qushlAMa3Q,consumerQueuefanoutqueue1〕)FANOUT消费者〔2〕收到消息:(Body:{messageId51f6672035dd4abf9d3324acf7786ed8,messageData666}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyFanoutExchange,receivedRoutingKey,deliveryTag2,consumerTagamq。ctagncVmsRM7xHLZ0iAJT2tSTg,consumerQueuefanoutqueue2〕)
  5通配符模式Topics
  在java配置文件DirectRabbitConfig中先声明一个Topic交换机、两个工作队列和三个通配绑定键,其中一个队列通过两个不同通配绑定键与交换机绑定,另外一个队列用第三个绑定键进行绑定。publicstaticfinalStringWORKQUEUEworkqueue;工作队列WorkQueueBeanpublicQueueworkQueue(){returnnewQueue(WORKQUEUE,true);}
  通过rabbitmq管理页面我们可以看到交换机与队列的绑定变化,可以看到队列1车工绑定了两个通配键
  创建一个消费者类TopicConsumers。创建两个消费者分别对两个队列做监听。ComponentpublicclassWorkConsumersextendsBase{RabbitListener(queuesDirectRabbitConfig。WORKQUEUE)publicvoidconsumer1(ObjecttestMessage){logger。debug(work消费者〔1〕收到消息:testMessage。toString());}RabbitListener(queuesDirectRabbitConfig。WORKQUEUE)publicvoidconsumer2(ObjecttestMessage){logger。debug(work消费者〔2〕收到消息:testMessage。toString());}}
  创造一个消息生产者。发送3条不同的消息,分别带上三个不同的路由键【Topic通配符模式】parammessage消息内容PostMapping(topic{message})publicStringsendTopicMessage(PathVariable(message)Stringmessage){MapString,ObjectmapnewHashMap();直接跟交换机MYFANOUTEXCHANGE交互rabbitTemplate。setExchange(DirectRabbitConfig。MYTOPICEXCHANGE);map。put(messageId,String。valueOf(UUID。randomUUID()));map。put(messageData,messageTEST1);rabbitTemplate。convertAndSend(DirectRabbitConfig。TOPICROUTINGKEYONE,map);map。put(messageId,String。valueOf(UUID。randomUUID()));map。put(messageData,messageTEST2);rabbitTemplate。convertAndSend(DirectRabbitConfig。TOPICROUTINGKEYTWO,map);map。put(messageId,String。valueOf(UUID。randomUUID()));map。put(messageData,messageTEST3);rabbitTemplate。convertAndSend(DirectRabbitConfig。TOPICROUTINGKEYTHREE,map);returnok;}
  路由键声明如下:publicstaticfinalStringTOPICROUTINGKEYONEtopic。a1。b1。c1;topic路由键1publicstaticfinalStringTOPICROUTINGKEYTWOtopic。a1。b1;topic路由键2publicstaticfinalStringTOPICROUTINGKEYTHREEtopic。a2。b1;topic路由键3
  启动项目,调用生产者的接口,查看两个消费者的消费情况。TOPIC消费者〔2〕收到消息:(Body:{messageId82abd28211104f1ab09eae9a43c560c3,messageDatahitopic!TEST1}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyTopicExchange,receivedRoutingKeytopic。a1。b1。c1,deliveryTag1,consumerTagamq。ctagwlRVC5xWiN8glrtA2i6uA,consumerQueuetopicqueue2〕)TOPIC消费者〔1〕收到消息:(Body:{messageIdb203955775d847d593a02a03a38fabc7,messageDatahitopic!TEST2}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyTopicExchange,receivedRoutingKeytopic。a1。b1,deliveryTag1,consumerTagamq。ctagF6ByjknEnCjh7XVolNfmcg,consumerQueuetopicqueue1〕)TOPIC消费者〔2〕收到消息:(Body:{messageIdb203955775d847d593a02a03a38fabc7,messageDatahitopic!TEST2}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyTopicExchange,receivedRoutingKeytopic。a1。b1,deliveryTag2,consumerTagamq。ctagwlRVC5xWiN8glrtA2i6uA,consumerQueuetopicqueue2〕)TOPIC消费者〔1〕收到消息:(Body:{messageId3a8f3164706f4523bd2a4fee73595fbb,messageDatahitopic!TEST3}MessageProperties〔headers{},contentTypeapplicationxjavaserializedobject,contentLength0,receivedDeliveryModePERSISTENT,priority0,redeliveredfalse,receivedExchangemyTopicExchange,receivedRoutingKeytopic。a2。b1,deliveryTag2,consumerTagamq。ctagF6ByjknEnCjh7XVolNfmcg,consumerQueuetopicqueue1〕)
  可以看到,路由键前缀为topic。a1的信息都可以被绑定了topic。a1。的队列接收到,而绑定了topic。a1。的队列只能接收到topic。a1后面带一个单词的信息,由于队列1还通过topic。。b1绑定交换机,因此携带路由键topic。a2。b1的信息同样也被队列1接收topic交换机是direct交换机做的改造的。两者的区别主要体现在路由键和绑定键格式上的限制不同。
  路由键:必须是由点分隔的单词列表。单词形式不限。比如一个主题建:主题1。主题2。主题3
  绑定键:格式上和路由键一致,但多了两个通配符和,代表任意数量的单词,包括0个。标识一个单词。
  使用上,一个绑定键,我们可以看成是对一类具有多个特征的物体的一个抽象,由点分割的每个单词,我们可以看成一个主题或是一个特征。因此只要做好消息特征的归纳抽象,加上通配符的使用,我们就有很高的自由度去处理任意类型的消息
  总结
  以上就是关于RabbitMQ五种队列模式的实战演练,关于RabbitMQ其它实战与知识理解后续会相继分享,感兴趣的同学欢迎留言讨论

华为董事长徐直军官宣,6G上市时间被确定,未来6G能干啥?6G能解决万物互联。现在人能想到的和没能想到的在6G时代都可能实现。6G为人类生活服务,及时有效准确很容易。例如2014。3。8失踪的MH370客机至今都没有下落,造成巨大损失……云米洗碗机谁用过,洗的干不干净?我觉得挺干净的,因为我是那种不愿意洗碗洗餐具的,觉得好繁琐好麻烦,所以我就买的洗碗机,到目前一直用的都是云米AI洗碗机Iron智目洗10套,拥有它就相当于拥有了一台有眼睛,看得……一人租房,有哪些超实用的小家电家居神器值得推荐?看到这问题,我虎躯一震,你真是问对人了,现在的我正是一个人租房,而且一个人租住好几年了,看看我住的环境。家徒四壁吧?一个人住特别是一个上班族住,不需要太奢华,高科技的现在……央行孙天琦大V带货金融产品必须持牌央广网北京2月9日消息日前,中国人民银行金融稳定局局长孙天琦在《中国金融》刊文表示,在数字经济快速发展、金融领域深化改革和扩大开放的大背景下,互联网平台或技术对于增强金融机构特……捆绑的银行卡安全吗?我们知道,随着移动支付的发展和普及,随之而来的是出现了不少需要绑定银行卡的各种金融支付类型的软件,特别是现在春节过年抢红包的时候,捆绑银行的事情更多了。那么问题来了,这样捆绑,……java控制流量的一种方式TimedSemaphore是一个不错的选择,简单、意义明确。示例代码TimedSemaphoretimedSemaphorenewTimedSemaphore(2……折叠屏手机已经很多产商出了,为什么还没有折叠屏笔记本电脑?关于折叠屏电脑,早就已经出现了,不过目前的机型没有完全推出商用版本,2020年联想就发布了他的概念机!而最近有爆料三星也才开始准备推出概念款的折叠屏笔记本!2020年10……iPhone13猛料,彻底告别无信号作为iPhone的使用者,或多或少都得过英特尔恐惧综合征,谁也不知道信号会不会中断和信号什么时候中断。在iPhone12系列回归高通X55基带之前,苹果跟高通有矛盾,所以……界面早报工信部尽早研究明确新能源汽车车购税优惠延续等支持政策工信部:尽早研究明确新能源汽车车购税优惠延续等支持政策1月18日,工业和信息化部党组书记、部长肖亚庆主持召开部际联席会议2022年度工作会议。会议强调,要落实碳达峰碳中和……陕西聚力推进关键核心技术攻关记者从4月22日召开的全省科技工作会议上获悉:陕西将继续围绕重点产业链和地方特色产业持续发力,聚力推进关键核心技术攻关,推动创新链产业链融合发展。加强产业共性技术和卡脖子……华为移动路由天际通版,明日开售了华为昨日预热的专属新拍档今日正式揭晓华为移动路由天际通版,新品将于9月1日在华为商城开售,售价349元。华为移动路由同时支持移动网络和有线网络,兼具SIM卡插卡上网和有线……具备飞行模式!特斯拉Cybertruck专利公开,隐藏功能大噱头十足的特斯拉Cybertruck自2019年底亮相至今,已经获得了超过了100万辆的购买订单,虽然其量产版本的实际规格一直尚未发布,却也并未妨碍广大车迷对这台怪异皮卡的追捧……
世界最小的妓女实在是太过分了没有人性世界最小的妓女,在网上看了看,最小的有六岁。雏妓在世界上大多数国家都属非法职业,但在部分国家仍是无法根绝的行业。雏妓或童妓,指未达成年的性工作者,不仅仅有女孩子,还有男孩子。这……郎朗吉娜综艺节目叫什么幸福三重奏他俩的看点最大郎朗和吉娜结婚了,在结婚之后本来争议就很多,之后就上了综艺节目,也是在节目中秀恩爱,郎朗吉娜综艺节目叫什么?幸福三重奏他俩的看点最大,其实是看到了郎朗和吉娜两个人身上不一样的点……小巧便携功能多,海备思高清无线投屏器使用体验我想大家都一个烦恼,各大视频app都开了会员,但是就是和家里的电视不互通,开通电视上的会员吧,又得多花好几百。如果能把手机上的资源共享到电视上,既省钱了不说,还获得了更佳的观影……陈艾森大包20公分让女人疯狂让男人自卑陈艾森大包20公分,这个在他的比赛视频中都是能够见到的,想要忽略掉基本上都是不可能的。这只能说明陈艾森的男性资本非常雄厚,让女人疯狂让男人自卑,让屏幕外的观众除了注意他的比赛之……陈艾森跳水内裤凸起水中没看的很清楚不过真掉了陈艾森的身材是不输于娱乐圈中任何一位艺人吧!不过陈艾森是运动员,那么身材什么是真的很好,也是因为全身只有内裤还是三角内裤,不是什么平角内裤,那么全部都被看的非常清楚,其中则是说……张国荣尸检照想想都觉得心痛张国荣是香港顶顶大名的演员和歌手,他出道的时候歌声在舞台上感动人心,那个时候香港的流行音乐里边他是主流风云人物,后来转战到了电影行业中,代表作品《倩女幽魂》更是在国际上赫赫有名……江疏影老公是谁?这两人太般配了江疏影因为当年赵薇的一部《致我们终将逝去的青春》而开始进入到大家的视野。虽然当时并没有因为这部影片大红大紫,但至少让更多的人知道了她的存在。后期江疏影的发展也是相当不错的,通过……韩国所有女团名单每年出道很多最出名的有什么女团的更新换地很快速,为什么会这样说呢?在一个时间段中如果是很红火了,那么之后就会单飞,所以说艺人很多,只是在团队合作的时候也只是在刚出来,或者是更加出名的时候,至于其他则是很……沈月和邱淑贞是什么关系除了名字一样没什么相似的地方沈月和邱淑贞是什么关系?在没有看到邱淑贞结婚生女的资料之前,估计大多数网友都不明白为什么拍戏的沈月会和邱淑贞扯上关系吧,毕竟邱淑贞可是一等一的大美女,而沈月这种日系风格的长相完……貂蝉去掉衣服的图片太惹眼,不来看看?貂蝉本来是中国古代四大美女之一,结果在英雄联盟游戏里面被再度演绎,不仅是貂蝉,好多历史或是小说里面存在的绝色美女都被网罗其中,貂蝉也只是游戏里面众多美人中的一个,这些女性网络人……成都九眼桥女真实身份我真的以为看错了成都九眼桥本来是当地非常有名的历史遗迹,却因为一部分过人的激行为再度成为大众的焦点汇聚地。成都九眼桥女真实身份基本上没有人扒的出来,那是因为对方在视频里面既没有露出整张脸,也没……搭载地表最强骁龙888Plus腾讯ROG游戏手机5s性能炸裂年初腾讯ROG游戏手机5横空出世,机皇级的性能配置,创新性的六指操控,将游戏手机设计推向全新高度,把专业级的手游体验带给玩家,京东平台618第一的销量好成绩,首届和平精英PSI……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网