最新要闻
- 中疾控:奥密克戎变异株再次感染,只有少数需医疗干预
- 理想成豪华市场最强中国品牌 仅次于BBA和特斯拉
- 每日报道:明天五一调休要上班!安卓用户喊话iPhone:苹果没节假日闹钟 果粉别睡过了
- 快报:谷歌Pixel Fold折叠屏手机定档5月10日:经典“相机条”设计
- 观速讯丨北京安监局特种作业证查询_安监局特种作业证查询
- 吃水果为什么可以解酒?苹果葡萄等五种水果最佳
- 滚动:自动驾驶数据遭破坏时 工信部:应能识别记录
- iPhone 14 Pro Max用户换上Redmi Note 12 Turbo 1T版:花2000多很值
- 比亚迪的刀片 终于“捅向”特斯拉|天天最资讯
- 半年亏7千万 老板想跳楼!新能源造富运动结束了_环球新资讯
- 关于雷的成语_关于一的成语_天天滚动
- 【天天时快讯】这座“中国建造”让洪都拉斯人有了更多期盼
- 曝光收车、卖车“套路” 博主被人人车发删稿函
- 天天速递!死磕影像!曝小米14系列将搭载独家WLG高透镜片
- 干翻Java/C++!Python成最受开发者欢迎编程语言:岗位报酬高居第一_环球快消息
- 热点在线丨山东71岁爷爷一年2次外出卖止咳蜂蜜糖:一待就是一两个月
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天观察:Rabbitmq 介绍 、安装、基于Queue实现生产者消费者模型、基本使用、消息安全之ack、durable持久化、利用闲置消费、发布订阅、发布订阅高级之Royting(按关键字匹配)、Topic关键字模糊匹配、基于rabbitmq实现rpc
师承老刘llnb
一、消息队列介绍
1.1介绍
消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下,生活中买东西,需要排队,先排的人先买消费,就是典型的“先进先出”
1.2MQ解决什么问题
MQ是一直存在,不过随着微服务架构的流行,成了解决微服务之间问题的常用工具。应用解耦以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。
(资料图)
当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中单用户感受不到物流系统的故障。提升系统的可用性流量削峰举个栗子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。
使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这事有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。消息分发多个服务队数据感兴趣,只需要监听同一类消息即可处理。例如A产生数据,B对数据感兴趣。如果没有消息的队列A每次处理完需要调用一下B服务。过了一段时间C对数据也感性,A就需要改代码,调用B服务,调用C服务。只要有服务需要,A服务都要改动代码。很不方便。有了消息队列后,A只管发送一次消息,B对消息感兴趣,只需要监听消息。C感兴趣,C也去监听消息。A服务作为基础服务完全不需要有改动异步消息有些服务间调用是异步的,例如A调用B,B需要花费很长时间执行,但是A需要知道B什么时候可以执行完,以前一般有两种方式,A过一段时间去调用B的查询api查询。或者A提供一个callback api,B执行完之后调用api通知A服务。这两种方式都不是很优雅使用消息总线,可以很方便解决这个问题,A调用B服务后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A服务。
这样A服务既不用循环调用B的查询api,也不用提供callback api。同样B服务也不用做这些操作。A服务还能及时的得到异步处理成功的消息
1.3 常见消息队列及比较
结论:
Kafka在于分布式架构,RabbitMQ基于AMQP协议来实现,RocketMQ/思路来源于kafka,改成了主从结构,在事务性可靠性方面做了优化。广泛来说,电商、金融等对事务性要求很高的,可以考虑RabbitMQ和RocketMQ,对性能要求高的可考虑Kafka
二 Rabbitmq安装
官网:https://www.rabbitmq.com/getstarted.html
2.1 服务端原生安装
# 安装配置epel源# 安装erlangyum -y install erlang# 安装RabbitMQyum -y install rabbitmq-server
2.2服务端Docker安装
docker pull rabbitmq:managementdocker run -di --name Myrabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:managemen
2.3客户端安装
pip3 install pika
2.4 设置用户和密码
rabbitmqctl add_user lqz 123# 设置用户为administrator角色rabbitmqctl set_user_tags lqz administrator# 设置权限rabbitmqctl set_permissions -p "/" root ".*" ".*" ".*"# 然后重启rabbiMQ服务systemctl reatart rabbitmq-server # 然后可以使用刚才的用户远程连接rabbitmq server了。
三 基于Queue实现生产者消费者模型
import Queueimport threadingmessage = Queue.Queue(10)def producer(i): while True: message.put(i)def consumer(i): while True: msg = message.get()for i in range(12): t = threading.Thread(target=producer, args=(i,)) t.start()for i in range(10): t = threading.Thread(target=consumer, args=(i,)) t.start()
四 基本使用(生产者消费者模型)
对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Server实现的消息队列。生产者
import pika# 无密码# connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1"))# 有密码credentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)channel.queue_declare(queue="lqz")channel.basic_publish(exchange="", routing_key="lqz", # 消息队列名称 body="hello world")connection.close()
消费者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)channel.queue_declare(queue="lqz")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body)channel.basic_consume(queue="lqz",on_message_callback=callback,auto_ack=True)channel.start_consuming()
五 消息安全之ack
生产者
import pika# 无密码# connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1"))# 有密码credentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)channel.queue_declare(queue="lqz")channel.basic_publish(exchange="", routing_key="lqz", # 消息队列名称 body="hello world")connection.close()
消费者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)channel.queue_declare(queue="lqz")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body) # 通知服务端,消息取走了,如果auto_ack=False,不加下面,消息会一直存在 # ch.basic_ack(delivery_tag=method.delivery_tag)channel.basic_consume(queue="lqz",on_message_callback=callback,auto_ack=False)channel.start_consuming()
六 消息安全之durable持久化
生产者
import pika# 无密码# connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1"))# 有密码credentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列),durable=True支持持久化,队列必须是新的才可以channel.queue_declare(queue="lqz1",durable=True)channel.basic_publish(exchange="", routing_key="lqz1", # 消息队列名称 body="111", properties=pika.BasicProperties( delivery_mode=2, # make message persistent,消息也持久化 ) )connection.close()
消费者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)channel.queue_declare(queue="lqz1")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body) # 通知服务端,消息取走了,如果auto_ack=False,不加下面,消息会一直存在 # ch.basic_ack(delivery_tag=method.delivery_tag)channel.basic_consume(queue="lqz1",on_message_callback=callback,auto_ack=False)channel.start_consuming()
七 闲置消费
正常情况如果有多个消费者,是按照顺序第一个消息给第一个消费者,第二个消息给第二个消费者
但是可能第一个消息的消费者处理消息很耗时,一直没结束,就可以让第二个消费者优先获得闲置的消息生产者
import pika# 无密码# connection = pika.BlockingConnection(pika.ConnectionParameters("127.0.0.1"))# 有密码credentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列),durable=True支持持久化,队列必须是新的才可以channel.queue_declare(queue="lqz123",durable=True)channel.basic_publish(exchange="", routing_key="lqz123", # 消息队列名称 body="111", properties=pika.BasicProperties( delivery_mode=2, # make message persistent,消息也持久化 ) )connection.close()
消费者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 声明一个队列(创建一个队列)# channel.queue_declare(queue="lqz123")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body) # 通知服务端,消息取走了,如果auto_ack=False,不加下面,消息会一直存在 ch.basic_ack(delivery_tag=method.delivery_tag)channel.basic_qos(prefetch_count=1) #####就只有这一句话 谁闲置谁获取,没必要按照顺序一个一个来channel.basic_consume(queue="lqz123",on_message_callback=callback,auto_ack=False)channel.start_consuming()
八 发布订阅
发布者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()channel.exchange_declare(exchange="m1",exchange_type="fanout")channel.basic_publish(exchange="m1", routing_key="", body="lqz nb")connection.close()
订阅者(启动几次订阅者会生成几个队列)
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# exchange="m1",exchange(秘书)的名称# exchange_type="fanout" , 秘书工作方式将消息发送给所有的队列channel.exchange_declare(exchange="m1",exchange_type="fanout")# 随机生成一个队列result = channel.queue_declare(queue="",exclusive=True)queue_name = result.method.queueprint(queue_name)# 让exchange和queque进行绑定.channel.queue_bind(exchange="m1",queue=queue_name)def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body)channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=True)channel.start_consuming()
九 发布订阅高级之Routing(按关键字匹配)
发布者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()channel.exchange_declare(exchange="m2",exchange_type="direct")channel.basic_publish(exchange="m2", routing_key="bnb", # 多个关键字,指定routing_key body="lqz nb")connection.close()
订阅者1
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# exchange="m1",exchange(秘书)的名称# exchange_type="direct" , 秘书工作方式将消息发送给不同的关键字channel.exchange_declare(exchange="m2",exchange_type="direct")# 随机生成一个队列result = channel.queue_declare(queue="",exclusive=True)queue_name = result.method.queueprint(queue_name)# 让exchange和queque进行绑定.channel.queue_bind(exchange="m2",queue=queue_name,routing_key="nb")channel.queue_bind(exchange="m2",queue=queue_name,routing_key="bnb")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body)channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=True)channel.start_consuming()
订阅者2
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# exchange="m1",exchange(秘书)的名称# exchange_type="direct" , 秘书工作方式将消息发送给不同的关键字channel.exchange_declare(exchange="m2",exchange_type="direct")# 随机生成一个队列result = channel.queue_declare(queue="",exclusive=True)queue_name = result.method.queueprint(queue_name)# 让exchange和queque进行绑定.channel.queue_bind(exchange="m2",queue=queue_name,routing_key="nb")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body)channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=True)channel.start_consuming()
9.1发布订阅高级之Topic(按关键字模糊匹配)
发布者
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()channel.exchange_declare(exchange="m3",exchange_type="topic")channel.basic_publish(exchange="m3", # routing_key="lqz.handsome", #都能收到 routing_key="lqz.handsome.xx", #只有lqz.#能收到 body="lqz nb")connection.close()
订阅者1只能加一个单词
可以加任意单词字符
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# exchange="m1",exchange(秘书)的名称# exchange_type="direct" , 秘书工作方式将消息发送给不同的关键字channel.exchange_declare(exchange="m3",exchange_type="topic")# 随机生成一个队列result = channel.queue_declare(queue="",exclusive=True)queue_name = result.method.queueprint(queue_name)# 让exchange和queque进行绑定.channel.queue_bind(exchange="m3",queue=queue_name,routing_key="lqz.#")def callback(ch, method, properties, body): print("消费者接受到了任务: %r" % body)channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=True)channel.start_consuming()
订阅者2
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# exchange="m1",exchange(秘书)的名称# exchange_type="topic" , 模糊匹配channel.exchange_declare(exchange="m3",exchange_type="topic")# 随机生成一个队列result = channel.queue_declare(queue="",exclusive=True)queue_name = result.method.queueprint(queue_name)# 让exchange和queque进行绑定.channel.queue_bind(exchange="m3",queue=queue_name,routing_key="lqz.*")def callback(ch, method, properties, body): queue_name = result.method.queue # 发送的routing_key是什么 print("消费者接受到了任务: %r" % body)channel.basic_consume(queue=queue_name,on_message_callback=callback,auto_ack=True)channel.start_consuming()
十 基于rabbitmq实现rpc
服务端
import pikacredentials = pika.PlainCredentials("admin","admin")connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200",credentials=credentials))channel = connection.channel()# 起翰监听任务队列channel.queue_declare(queue="rpc_queue")def on_request(ch, method, props, body): n = int(body) response = n + 100 # props.reply_to 要放结果的队列. # props.correlation_id 任务 ch.basic_publish(exchange="", routing_key=props.reply_to, properties=pika.BasicProperties(correlation_id= props.correlation_id), body=str(response)) ch.basic_ack(delivery_tag=method.delivery_tag)channel.basic_qos(prefetch_count=1)channel.basic_consume( queue="rpc_queue",on_message_callback=on_request,)channel.start_consuming()
客户端
import pikaimport uuidclass FibonacciRpcClient(object): def __init__(self): credentials = pika.PlainCredentials("admin", "admin") self.connection = pika.BlockingConnection(pika.ConnectionParameters("10.0.0.200", credentials=credentials)) self.channel = self.connection.channel() # 随机生成一个消息队列(用于接收结果) result = self.channel.queue_declare(queue="",exclusive=True) self.callback_queue = result.method.queue # 监听消息队列中是否有值返回,如果有值则执行 on_response 函数(一旦有结果,则执行on_response) self.channel.basic_consume(queue=self.callback_queue,on_message_callback=self.on_response, auto_ack=True) def on_response(self, ch, method, props, body): if self.corr_id == props.correlation_id: self.response = body def call(self, n): self.response = None self.corr_id = str(uuid.uuid4()) # 客户端 给 服务端 发送一个任务: 任务id = corr_id / 任务内容 = "30" / 用于接收结果的队列名称 self.channel.basic_publish(exchange="", routing_key="rpc_queue", # 服务端接收任务的队列名称 properties=pika.BasicProperties( reply_to = self.callback_queue, # 用于接收结果的队列 correlation_id = self.corr_id, # 任务ID ), body=str(n)) while self.response is None: self.connection.process_data_events() return self.responsefibonacci_rpc = FibonacciRpcClient()response = fibonacci_rpc.call(50)print("返回结果:",response)
关键词:
-
天天观察:Rabbitmq 介绍 、安装、基于Queue实现生产者消费者模型、基本使用、消息安全之ack、durable持久化、利用闲置消费、发布订阅、发布订阅
==师承老刘llnb====一、消息队列介绍==1 1介绍消息队列就是基础数据结构中的“先进先出”的一种数据机构。
来源: 天天观察:Rabbitmq 介绍 、安装、基于Queue实现生产者消费者模型、基本使用、消息安全之ack、durable持久化、利用闲置消费、发布订阅、发布订阅
中疾控:奥密克戎变异株再次感染,只有少数需医疗干预
理想成豪华市场最强中国品牌 仅次于BBA和特斯拉
每日报道:明天五一调休要上班!安卓用户喊话iPhone:苹果没节假日闹钟 果粉别睡过了
快报:谷歌Pixel Fold折叠屏手机定档5月10日:经典“相机条”设计
「学习笔记」AC 自动机
全球今亮点!P4093[HEOI2016/TJOI2016]序列
Python 脚本部署和发布 Django 应用程序的示例代码及注释
观速讯丨北京安监局特种作业证查询_安监局特种作业证查询
天天即时:【金融街发布】深交所发布两项公司债券信息披露业务指引
吃水果为什么可以解酒?苹果葡萄等五种水果最佳
滚动:自动驾驶数据遭破坏时 工信部:应能识别记录
iPhone 14 Pro Max用户换上Redmi Note 12 Turbo 1T版:花2000多很值
比亚迪的刀片 终于“捅向”特斯拉|天天最资讯
半年亏7千万 老板想跳楼!新能源造富运动结束了_环球新资讯
关于雷的成语_关于一的成语_天天滚动
声音检测报警模块方案解析
【天天时快讯】这座“中国建造”让洪都拉斯人有了更多期盼
曝光收车、卖车“套路” 博主被人人车发删稿函
天天速递!死磕影像!曝小米14系列将搭载独家WLG高透镜片
干翻Java/C++!Python成最受开发者欢迎编程语言:岗位报酬高居第一_环球快消息
热点在线丨山东71岁爷爷一年2次外出卖止咳蜂蜜糖:一待就是一两个月
当前信息:92岁巴菲特还没有退休计划:曾直言身体“不能再好了”
教育部:开展校外培训“平安消费”专项行动
JavaScript原型链污染学习记录
记录-Symbol学习笔记|环球速看
璞华助力“数字人社”,为成都市人社数字化建设提供多方位的产品与技术支持!
ChatGPT背后的打工人:你不干,有的是AI干_今热点
世界热讯:elementUi+table实现表格数据滚动
中梁控股2023年1-4月累计交付房屋22399套
全球热消息:【金融街发布】上交所修订发布公司债券存续期信息披露业务指引
每日头条!【财经分析】北京银行多项指标大幅落后同行 城商行“一哥”地位堪忧
世界资讯:对标千元级耳机!真我Buds Air5 Pro无线耳机官宣
天天热文:全球首例!我国完成介入式脑机接口非人灵长类动物试验:比马斯克公司更安全
一老年代步三轮车高速路狂飙:大众车速95km/h勉强跟上-全球新动态
新研究表明:超7成用户在手机电量低于20%时感到焦虑
《原子之心》通过Steam Deck验证 上手把玩姐妹花! 当前时讯
全球热资讯!歌尔股份发布首款XR智能交互手环参考设计
速讯:《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Trace,6位半多斜率精密ADC设计,开源数学库
淘金币在哪里看_淘金币多久过期 世界讯息
嵘泰转债异常交易处理结果出炉:匹配成交取消 不影响转股赎回|世界信息
Redmi MAX 90英寸巨屏电视发布 首发只要7999元 天天关注
没有5G卖4G的华为手机好起来了!一季度出货量增加14%:排名全球第十|焦点滚动
没有肛门只吃不拉!儿时经常把玩的小虫:如今一斤卖6千-当前看点
环球动态:手机通话增加患高血压风险 专家建议:每周接打电话不超半小时
反串还是自爆?一日产轩逸车主:高速只开80、尽量不走慢车道_世界焦点
厨电行业消费疲软,老板电器该如何突围?
天天百事通!绘画手残党的福音:涂鸦线稿秒变绝美图像
天天快播:保障用户买到限量版玩具,泡泡玛特用AIGC加持的验证码防范羊毛党
【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务 天天亮点
今日热门!Vue3项目(Vite+TS)使用Web Serial Api全记录
【快播报】抓住医院信息集成平台建设核心诉求
奥赛康:股东拟减持公司不超1%股份|环球焦点
世界黄金协会:一季度黄金总需求同比增长1% 央行购金仍可能成为今年支撑黄金需求的基石
每日看点!李蓓回应基金封盘:宁肯选择维持第二梯队的规模并争取维持一流的业绩
小伙日行三万步逛杭州 “特种兵式旅游”致半月板损伤
国内一集装箱惊现三辆特斯拉新跑车:被遗弃13年-全球讯息
凌晨四点的淄博什么样?烧烤店老板凌晨抢肉:热闹非凡_今日聚焦
自媒体称4月份接2笔理想商单共计30万 李想:造谣、法务部出来干活|每日消息
官方晒蒂法8岁、13岁美术设定图 身着连衣裙天真烂漫
网盘教育专享版,助力高校信息化和科研
环球信息:基于原子范数的深度展开网络实现
天天看热讯:Apache 配置https虚拟主机
世界快看点丨到底什么是小程序插件?
天天报道:如何不显示我的电脑、回收站等图标?
烟台高新区不断推进工程建设项目审批“应享尽享”水平 世界速看料
不愧是高端旗舰 RTX 4090游戏本性能爆棚:前提不差钱
高达12种!小米13成为史上颜色最多的小米手机
掀翻OLED!苹果自研MicroLED屏幕:进展顺利-每日速看
咋回事?董明珠1150万股格力股份遭冻结 市值约4亿元
对标拼多多?抖音推出“超便宜的小店”:试水低价电商|全球快看点
无锡市举办纪念五四运动 104周年主题团日活动
【天天速看料】Java基础学习之大数字处理相关的类有哪些?
将Windows系统设置NTP服务器-NetTime篇
金仓数据库字符串分割函数_天天速看料
深圳:港澳青年在深创业个人最高可贷60万元
苹果联合创始人炮轰马斯克自动驾驶画饼:想死就买特斯拉!
李佳琦面试75岁奶奶主播引围观:老人直呼为推广国货努力 这是国家自信
环球即时:调试器是个大骗子!
快速高效的C#FTP文件传输库FluentFTP|全球速讯
开心档之MySQL 导入数据-焦点报道
开封市通许县四所楼镇:让社情民意联络点当好民声传话筒|全球快讯
支持华为HMS服务!酷比魔方Pad 50Pro发布 首发899元
世界热点评!陌陌被苹果下架 官方回应:技术问题正解决 老用户不影响
这五一超20万人去淄博:鲁C变身网红旅游名城_快资讯
当前讯息:怎么看?老人欲插队被服务员严词拒绝:前有插队婆孙被网曝 还被做车贴很恶心
功能不成熟 马斯克推特直播秒变马赛克 网友吐槽:8-Bit埃隆_世界新要闻
今年全国快递业务量突破400亿件
常用的热门 API 汇总 环球热推荐
即时看!jasperreport开发手册--ireport教程
世界百事通!什么是EMR?为什么要以电子病历(EMR)为核心,建设医院信息集成平台?
安全验证必备——语音验证码短信 API 当前快看
火山引擎 DataTester 上线全新 MAB 智能调优实验
坎普斯boss怎么打_坎普斯怎么打_当前快讯
一机多用:劲能电钻/电动螺丝刀39元起(100元大额券) 每日速递
【天天热闻】向华为供货740万块硬盘 被重罚3亿美元!希捷:已和解并开始付罚金
当前观点:特斯拉公共充电桩功率仅23KW 比亚迪车主一度愧疚:把人家功率吸走了
又一五菱神车!宝骏悦也5月15日首发:车尾背个“大手表”
iPhone平均售价越来越高了!Pro和Pro Max最受果粉喜爱
当前短讯!浙江师范大学2023年硕士研究生复试录取办法