源码导读:http://dubbo.apache.org/zh-cn/docs/source_code_guide/export-service.html

概念
Invoker:实体域。Invoker是Dubbo的核心模型,其它模型都向它靠扰或转换成它,它代表一个可执行体,可向它发起invoke调用。
它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
提供者的invoker
1.本质上应该是一个代理,经过层层包装最终进行了发布。当消费者发起请求的时候,会获得这个invoker进行调用。
2.最终发布出去的invoker也不是单纯的一个代理,也是经过多层包装:InvokerDelegate(DelegateProviderMetaDataInvoker(JavassistProxyFactory.AbstractProxyInvoker))
AbstractProxyInvoker invoker = JavassistProxyFactory.getInvoke();
消费者的2层invoker
1.外层invoker:Cluster.join(Directory directory);
把Directory中的多个DubboInvoker合并为1个Invoker,这个Invoker代表消费者进行远程调用时的操作对象。
Invoker=MockClusterInvoker(FailoverClusterInvoker(Directory)。对应1个服务提供者。
2.内层invoker:RegistryDirectory.urlInvokerMap 中缓存的invoker
invoker=InvokerDelegate(ListenerInvokerWrapper(CallbackRegistrationInvoker(AsyncToSyncInvoker(DubboInvoker))))。对应1个服务。
Exporter:服务暴露。Exporter exporter= Protocol.export(Invoker invoker):暴露某种协议的服务。
Proxy:Proxy层封装了所有接口的透明化代理。其它层都以Invoker为中心,只有到了暴露给用户使用时,才用Proxy将Invoker转成接口,或将接口实现转成Invoker。
也就是去掉Proxy层RPC是可以Run的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。
Registry:注册中心。有多种实现:Zookeeper/Nacos/Consul/Redis/Sofa/Etcd/Dubbo
Directory:目录。分为:StaticDirectory/RegistryDirectory。
服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。
如果服务提供者的数量或者配置发生变动,服务目录中的记录也要做相应的更新。
服务目录在获取注册中心的服务配置信息后,会为每条配置信息生成一个Invoker对象,并把这个Invoker对象存储起来,这个Invoker才是服务目录最终持有的对象。Invoker是一个具有远程调用功能的对象。
服务目录本质就是Invoker集合,且这个集合中的元素会随注册中心的变化而进行动态调整。
Mock:降级。
Router:路由。包括:条件路由/标签路由/脚本路由
LoadBalance:负载均衡。策略:基于权重随机(RandomLoadBalance)/最少活跃调用数(LeastActiveLoadBalance)/一致性hash(ConsistentHashLoadBalance)/加权轮询(RoundRobinLoadBalance)
Cluster:集群容错。包括: Failover/Failfast/Failsafe/Failback/Forking => 失败自动切换/快速失败/失败安全/失败自动恢复/并行调用多个服务提供者
Cluster的目的是将多个Invoker伪装成一个Invoker。只有一个提供者时,是不需要Cluster的。
Filter:在每次的调用过程中,Filter的拦截都会被执行。
Dubbo已经实现的Filter有二十几个,它们的入口都是ProtocolFilterWrapper,ProtocolFilterWrapper对Protocol做了Wrapper,会在加载扩展的时候被加载进来。
用户自己配置的Filter中,有些是默认激活,有些是需要通过配置文件来激活。
而所有Filter的加载顺序,也是先处理Dubbo的默认Filter,再来处理用户自己定义并且配置的Filter。
通过"-"配置,可以替换掉Dubbo的原生Filter,通过这样的设计,可以灵活地替换或者修改Filter的加载顺序。
Protocol:协议层。支持:dubbo/http/rmi/hessian/rest/webservice/thrift/grpc/memcached/redis
Protocol是核心层,只要有Protocol+Invoker+Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。
AbstractProtocol.exporterMap:保存了提供者暴露的所有服务。
Transport:netty3/netty4/mina/jetty/grizzly/p2p/zookeeper
Serialization:Hessian2/java/json/fastjson/kryo/NativeHessian/Avro
RpcInvocation:参数组装。它持有调用过程中的变量,比如方法名,参数等。
Request:客户端请求。封装了Invocation。
Response:
Result:一次RPC调用的结果。
ProviderConsumerRegTable:本地注册表。服务暴露时注册提供者,服务发现时注册消费者,服务重新暴露时重新注册提供者。

invoker代理的服务提供方接口类(interface属性)可以有多个方法。
消费者调用时怎么知道调哪个方法:配置接口级别的引用,代码中直接调API接口的某个方法。
ProviderConfig是提供方配置:当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值
ConsumerConfig是消费方配置:当 ReferenceConfig 某属性没有配置时,采用此缺省值
GenericService:泛化服务:http://dubbo.apache.org/zh-cn/docs/user/demos/generic-service.html http://dubbo.apache.org/zh-cn/docs/user/demos/generic-reference.html

SPI
1.ExtensionLoader.getExtensionLoader:创建指定类型的ExtensionLoader对象
1.new ExtensionLoader(type):创建指定类型的ExtensionLoader对象
->AdaptiveExtensionFactory objectFactory = ExtensionLoader.getExtensionLoader(ExtensionFactory.class).getAdaptiveExtension():初始化这个extensionLoader对象的objectFactory
objectFactory作用:扩展点依赖注入(injectExtension)时会通过objectFactory生成待注入的属性所需类型的自适应扩展点
2.把extensionLoader对象缓存到Map中:EXTENSION_LOADERS.putIfAbsent(type,extensionLoader);
2.ExtensionLoader.getExtension:创建指定类型静态扩展点的实例
createExtension
1.getExtensionClasses->loadExtensionClasses->loadDirectory(加载指定路径下的文件中配置的扩展点Class,保存到cachedClasses属性中)->loadResource->loadClass
1.cacheAdaptiveClass:把标注了@Adaptive注解的类赋值给cachedAdaptiveClass属性。
2.cacheWrapperClass:保存type类型的包装类到cachedWrapperClasses属性。type为Protocol时包装类为:QosProtocolWrapper/ProtocolListenerWrapper/ProtocolFilterWrapper
3.cacheActivateClass:保存标注了@Activate注解的类到cachedActivates属性。
4.saveInExtensionClass
2.clazz.newInstance
3.injectExtension
4.instance = wrapperClass.getConstructor(type).newInstance(instance);包装instance,例如生成DubboProtocol时经过包装后变为:QosProtocolWrapper(ProtocolListenerWrapper(ProtocolFilterWrapper(DubboProtocol))
3.ExtensionLoader.getAdaptiveExtension:创建指定类型自适应扩展点的实例
createAdaptiveExtension
1.getAdaptiveExtensionClass
1.getExtensionClasses->loadExtensionClasses->loadDirectory(加载指定路径下的文件中配置的扩展点Class,保存到cachedClasses属性中)->loadResource->loadClass
1.cacheAdaptiveClass:把标注了@Adaptive注解的类赋值给cachedAdaptiveClass属性。
2.cacheWrapperClass:保存type类型的包装类到cachedWrapperClasses属性。
1.type为Protocol时包装类为:QosProtocolWrapper/ProtocolListenerWrapper/ProtocolFilterWrapper
2.程序运行过程中,当调用到ProtocolAdaptive@AdaptiveURL(dubbo://ip:port)(DubboProtocol)DubboProtocolQosProtocolWrapper(ProtocolListenerWrapper(ProtocolFilterWrapper(DubboProtocol))3.cacheActivateClass:@ActivatecachedActivates4.saveInExtensionClass2.createAdaptiveExtensionClass:@AdaptiveClass1.Stringcode=newAdaptiveClassCodeGenerator(type,cachedDefaultName).generate();2.ClassLoaderclassLoader=findClassLoader();3.Compilercompiler=ExtensionLoader.getExtensionLoader(Compiler.class).getAdaptiveExtension();CompilerJavassistCompiler4.Classclazz=compiler.compile(code,classLoader);1codeClass2.Class.newInstance:1Class3.injectExtension4.ExtensionLoader.getActivateExtension:5.ExtensionLoader.injectExtension:0.ExtensionLoader.createExtension/createAdaptiveExtensioninjectExtensionsetter1.instance:setterRegistryProtocol,setProtocolProtocol2.method:RegistryProtocolsetProtocol3.pt:Protocol.class4.property:"Protocol"5.object:ProtocolAdaptive的@Adaptive方法时,会根据URL(例如dubbo://ip:port)获取静态扩展点(DubboProtocol),其中会把DubboProtocol包装为QosProtocolWrapper(ProtocolListenerWrapper(ProtocolFilterWrapper(DubboProtocol))3.cacheActivateClass:保存标注了@Activate注解的类到cachedActivates属性。4.saveInExtensionClass2.createAdaptiveExtensionClass:为标注了@Adaptive的方法创建Class对象1.String code = new AdaptiveClassCodeGenerator(type, cachedDefaultName).generate();生成动态代理类的字符串2.ClassLoader classLoader = findClassLoader();3.Compiler compiler = ExtensionLoader.getExtensionLoader(Compiler.class).getAdaptiveExtension();Compiler实际上是JavassistCompiler4.Class clazz = compiler.compile(code, classLoader);编译1生成的code代码为Class对象2.Class.newInstance:实例化1中的Class对象3.injectExtension 4.ExtensionLoader.getActivateExtension:创建指定类型激活扩展点的实例 5.ExtensionLoader.injectExtension:扩展点依赖注入0.ExtensionLoader.createExtension/createAdaptiveExtension 创建扩展点时会调用injectExtension,把当前扩展点实例需要通过setter注入赋值的属性赋上值1.instance:需要通过setter注入属性的对象,其本身也是一个扩展点。例如:RegistryProtocol,需要通过setProtocol注入Protocol2.method:RegistryProtocol的setProtocol方法3.pt:Protocol.class。其本身是一个扩展点。4.property:"Protocol"5.object:ProtocolAdaptive。objectFactory.getExtension(pt, property)->AdaptiveExtensionFactory.getExtension:遍历SpiExtensionFactory/SpringExtensionFactory获取扩展点实例。
1.SpiExtensionFactory.getExtension->ExtensionLoader.getAdaptiveExtension(Protocol.class)
2.SpringExtensionFactory.getExtension->ApplicationContext.getBean:从spring容器中按name查找
6.method.invoke(instance, object);调用RegistryProtocol的setProtocol方法,把ProtocolAdaptiveRegistryProtocolprotocol7.1.RegistryProtocolprotocolRegistryProtocolregistryProtocol=ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("registry")>createExtension>injectExtension:5ProtocolAdaptive对象注入到RegistryProtocol的protocol属性7.例子1.RegistryProtocol的protocol属性赋值:RegistryProtocol registryProtocol = ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("registry")->createExtension->injectExtension:把5中生成的ProtocolAdaptive对象赋值给protocol属性
2.RegistryProtocol的registryFactory属性赋值:RegistryProtocol registryProtocol = ExtensionLoader.getExtensionLoader(Protocol.class).getExtension(“registry”)->createExtension->injectExtension:把5中生成的RegistryFactoryAdaptiveregistryFactory3.ZookeeperRegistryFactoryzookeeperTransporterZookeeperRegistryFactoryzookeeperRegistryFactory=ExtensionLoader.getExtensionLoader(RegistryFactory.class).getExtension("zookeeper")>createExtension>injectExtension:5ZookeeperTransporterAdaptive对象赋值给registryFactory属性3.ZookeeperRegistryFactory的zookeeperTransporter属性赋值:ZookeeperRegistryFactory zookeeperRegistryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getExtension("zookeeper")->createExtension->injectExtension:把5中生成的ZookeeperTransporterAdaptive对象赋值给zookeeperTransporter属性

服务暴露
1.DubboBeanDefinitionParser.parse方法解析spring.xml中的dubbo:service标签内容保存到ServiceBean
2.ServiceBean.afterPropertiesSet把dubbo中配置的application/registry/service/protocol等信息,加载到对应的config实体中,便于后续的使用
3.ServiceBean.onApplicationEvent(监听到spring上下文被刷新或者加载的时候触发)->export->ServiceConfig.export->doExport->doExportUrls:循环遍历protocols暴露服务
4.ServiceConfig.doExportUrlsFor1Protocol
1.解析dubbo:method配置,保存到map集合中
2.获得当前服务需要暴露的ip和端口
3.把解析到的所有数据,组装成一个URL
4.发布Local或Remote服务:Remote循环遍历registryURLs暴露服务。registryURL类型:registry://ip:port
1.AbstractProxyInvoker invoker = JavassistProxyFactory.getInvoker
2.protocol.export
5.RegistryProtocol.export
1.URLregistryUrl=getRegistryUrl:registryUrl类型从registry://ip:port变为zookeeper://ip:port
2.URLproviderUrl=getProviderUrl:providerUrl类型:dubbo://ip:port
3.订阅dubbo-admin,监听配置变动
4.doLocalExport->protocol.export:protocol经过包装变为QosProtocolWrapper(ProtocolListenerWrapper(ProtocolFilterWrapper(DubboProtocol))
->QosProtocolWrapper.export->ProtocolListenerWrapper.export->ProtocolFilterWrapper.export->DubboProtocol.export
0.ExtensionLoader.loadClass中会判断:isWrapperClass(clazz)。此处是一个扩展点。
1.QosprotocolWrapper:如果当前配置了注册中心,则会启动一个Qosserver.qos是dubbo的在线运维命令
2.ProtocolFilterWrapper:基于激活扩展点使用责任链模式构建filter链,来对invoker进行filter包装,从而在实现远程调用的时候,会经过这些filter进行过滤。
3.ProtocolListenerWrapper:用于服务export时候插入监听机制,暂未实现
6.DubboProtocol.export
1.openServer->createServer->Exchangers.bind->HeaderExchanger.bind->Transporters.bind->Transporter$Adaptive.bind
->NettyTransporter(默认netty4).bind->newNettyServer->newAbstractServer->NettyServer(默认netty4).doOpen
提供者启动netty服务与注册中心建立nio连接
ServerBootstrap.nettyServerHandler = NettyServerHandler(NettyServer(MultiMessageHandler(HeartbeatHandler(AllChannelHandler(DecodeHandler(HeaderExchangeHandler(DubboProtocol.ExchangeHandlerAdapter)))))))
2.exporterMap.put(key, exporter):exporterMap缓存本次exporter,方便调用时提供者从缓存中得到exporter进而获取invoker。
7.总结
1.基于spring解析配置文件存储到config
2.各种判断,保障配置信息安全
3.组装URL:registry/zookeeper/dubbo/injvm
4.使用动态代理构建1个invoker:AbstractProxyInvoker = JavassistProxyFactory.getInvoker
5.RegistryProtocol.export
6.对DubboProtocol进行包装:QosProtocolWrapper(ProtocolListenerWrapper(ProtocolFilterWrapper(DubboProtocol))
7.DubboProtocol.export发布服务:Exporter exporter= DubboProtocol.export(Invoker invoker)
8.启动NettyServer
9.扩展点依赖注入:ExtensionLoader.injectExtension

服务注册
1.RegistryProtocol.export:此处为入口
1.URL registryUrl = getRegistryUrl(originInvoker);得到的registryUrl形式为:zookeeper://ip:port
2.URL providerUrl = getProviderUrl(originInvoker);得到的providerUrl形式为:dubbo://ip:port
2.RegistryProtocol.getRegistry:获取注册中心
1.getRegistryUrl:把registryUrl从配置的协议(registry://)转换为具体的注册中心协议(例如zookeeper://)
2.AbstractRegistryFactory.getRegistry->createRegistry(根据URL创建注册中心)->ZookeeperRegistryFactory.createRegistry
->new ZookeeperRegistry->AbstractZookeeperTransporter.connect->createZookeeperClient->CuratorZookeeperTransporter.createZookeeperClient
->new CuratorZookeeperClient->CuratorFrameworkFactory.Builder.build
3.RegistryProtocol.register:把提供者URL写到注册中心zookeeper节点上
1.Registry registry = registryFactory.getRegistry(registryUrl);获取到的注册中心(registry)为ZookeeperRegistry
->RegistryFactory$Adaptive.getRegistry(registryUrl)
->ZookeeperRegistryFactory extension=ExtensionLoader.getExtensionLoader(RegistryFactory.class).getExtension(“zookeeper”)
->ZookeeperRegistryFactory.getRegistry(registryUrl)->AbstractRegistryFactory.getRegistry:2.2生成的注册中心会缓存起来,这里可以从缓存中取到
2.FailbackRegistry.register->doRegister->ZookeeperRegistry.doRegister->AbstractZookeeperClient.create->createEphemeral
->CuratorZookeeperClient.createEphemeral->CuratorFramework.create().withMode(CreateMode.EPHEMERAL).forPath(path)

服务发现
1.DubboBeanDefinitionParser.parse方法解析spring.xml中的dubbo:reference标签内容保存到ReferenceBean
->ReferenceBean.afterPropertiesSet把dubbo中配置的consumer/application/module/monitor/metrics等信息,加载到对应的config实体中,便于后续的使用
->getObject->ReferenceConfig.get
2.ReferenceConfig.get
->init->createProxy
1.checkRegistry
2.loadRegistries:根据注册中心配置进行解析得到URL=> registry://ip:port/org.apache.dubbo.service.RegsitryService
3.Invoker invoker=RegistryProtocol.refer(type,url)->doRefer
1.new RegistryDirectory:初始化RegistryDirectory
2.ZookeeperRegistry.register(registeredConsumerUrl)😕/注册consumerUrl到注册中心
3.RegistryDirectory.buildRouterChain
4.RegistryDirectory.subscribe:订阅注册中心指定节点的变化,如果发生变化,则通知到RegistryDirectory
5.Invoker invoker=MockClusterWrapper(FailoverCluster).join(RegistryDirectory):构建消费者的外层invoker=MockClusterInvoker(FailoverClusterInvoker(RegistryDirectory)
4.ProxyFactory$Adaptive.getProxy(invoker)->AbstractProxyFactory.getProxy->JavassistProxyFactory.getProxy
->Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker))
@Reference注入的一个对象实例本质上就是一个动态代理类。通过调用这个类中的方法,会触发InvokerInvocationHandler.invoke()
3.RegistryDirectory.subscribe
1.setConsumerUrl
2.ConsumerConfigurationListener.addNotifyListener(this):把当前RegistryDirectory作为listener,去监听zk上节点的变化
Dubbo2.7.X新增了针对配置节点的监听回调:
ReferenceConfigurationListener:负责reference的配置监听。监听/dubbo/config/org.apache.dubbo.demo.DemoService.configurators节点的data变化。
ConsumerConfigurationListener:负责consumer的配置监听。监听/dubbo/config/consumer-application-name.configurators节点的data变化。
ServiceConfigurationListener:负责service的配置监听。
ProviderConfigurationListener:负责provider的配置监听。
3.new ReferenceConfigurationListener(this, url)
4.ZookeeperRegsitry.subscribe->FailbackRegistry.subscribe->doSubscribe->ZookeeperRegistry.doSubscribe:监听某个服务下3个节点的子节点变动:providers/configurators/routers
1.ZookeeperClient.addChildListener:监听zk上providers/configurators/routers节点的子节点
2.notify->doNotify->AbstractRegistry.notify->RegistryDirectory.notify:对已经可用的列表通知provider的变动。Invoker的网络连接以及后续的配置变更,都会调用这个notify方法。
1.toRouters(routerURLs).ifPresent(this::addRouters):如果router路由节点有变化,则从新router下的数据生成router
2.refreshOverrideAndInvoker->refreshInvoker:获得providerURLs,然后刷新providerURLs
toInvokers:根据providerURL生成新的invoker。1个服务有n个提供者,就会生成n个providerURL。
Invoker invoker = new InvokerDelegate<>(protocol.refer(serviceType, url), url, providerUrl):构建消费者的内层invoker,缓存到RegistryDirectory.urlInvokerMap
invoker=InvokerDelegate(ListenerInvokerWrapper(CallbackRegistrationInvoker(AsyncToSyncInvoker(DubboInvoker))))
protocol.refer = ProtocolListenerWrapper(ProtocolFilterWrapper(QosProtocolWrapper(DubboProtocol))).refer
其中 CallbackRegistrationInvoker=ProtocolFilterWrapper.refer:包装了Filter链
4.ProtocolListenerWrapper(ProtocolFilterWrapper(QosProtocolWrapper(DubboProtocol))).refer->DubboProtocol.refer->AbstractProtocol.refer
Protocol.refer:通过指定的协议来调用refer生成一个invoker对象。消费者生成的对远程服务引用。invoker主要用于执行远程调用。
->DubboProtocol.protocolBindingRefer->getClients:获得客户端连接。
DubboInvoker就是通过调用 client.request()方法完成网络通信的请求发送和响应接收功能。
DubboInvoker.clients:1个DubboInvoker中可以保存多个ExchangeClient。1个ExchangeClient代表consumer到provider的1个连接。client = ReferenceCountExchangeClient(HeaderExchangeClient)
->getSharedClient:如果没有配置共享连接数,则connections为默认值1。如果配置了共享连接数,则connections为配置的值,表示consumer可以与每个provider节点建立多个连接。
->buildReferenceCountExchangeClientList->buildReferenceCountExchangeClient
->initClient->Exchangers.connect->HeaderExchanger.connect->Transporters.connect:通过netty建立连接
->NettyTransporter.connect->AbstractClient.connect->NettyClient.doConnect->Bootstrap.connect
5.总结
1.生成远程服务的代理
2.从注册中心获取获得目标服务的url地址,订阅注册中心上的节点变化
3.实现远程网络通信,建立通信连接
4.实现负载均衡
5.实现集群容错
6.服务降级(Mock)
7.序列化

服务调用
1.客户端调用服务
@Reference注入的一个对象实例本质上就是一个动态代理类。
通过调用这个类中的方法,会触发InvokerInvocationHandler(MockClusterInvoker(FailoverClusterInvoker(RegistryDirectory))).invoke()
MockClusterInvoker.invoke->FailoverClusterInvoker(extends AbstractClusterInvoker).invoke
1.RpcInvocation.addAttachments:隐式传参
2.List invokers = list(RpcInvocation)->RegistryDirectory.doList->RouterChain.route->Router.route:执行路由策略筛选RegistryDirectory中保存的多个invoker
3.initLoadBalance:初始化负载均衡策略
4.doInvoke->FailoverClusterInvoker.doInvoke
1.获得1个内层invoker:Invoker invoker = select(loadbalance, invocation, copyInvokers, invoked)->AbstractClusterInvoker.doSelect
->AbstractLoadBalance.select->RandomLoadBalance.doSelect:执行负载均衡策略选出1个内层invoker
invoker=InvokerDelegate(ListenerInvokerWrapper(CallbackRegistrationInvoker(AsyncToSyncInvoker(DubboInvoker))))
2.远程调用服务:Result result = 内层invoker.invoke(invocation)->…->DubboInvoker(extends AbstractInvoker).invoke->DubboInvoker.doInvoke
->ExchangeClient.request->ReferenceCountExchangeClient.request->HeaderExchangeClient.request->HeaderExchangeChannel.request
->AbstractPeer.send->AbstractClient.send->NettyChannel.send->Channel.writeAndFlush
2.服务端处理请求
nettyServerHandler.channelRead->NettyServer(extends AbstractPeer).received->MultiMessageHandler.received->HeartbeatHandler.received
->AllChannelHandler.received->ChannelEventRunnable.run->DecodeHandler.received->HeaderExchangeHandler.received->handleRequest
->DubboProtocol.ExchangeHandlerAdapter.reply
1.Invoker invoker = getInvoker(HeaderExchangeChannel,Invocation)
->DubboExporter exporter =AbstractProtocol.exporterMap.get(serviceKey)->DubboExporter.getInvoker()
2.Result result = invoker.invoke(Invocation)
服务提供者的invoker = InvokerDelegate(DelegateProviderMetaDataInvoker(JavassistProxyFactory.AbstractProxyInvoker))
InvokerDelegate(extends InvokerWrapper).invoke->DelegateProviderMetaDataInvoker.invoke
->AbstractProxyInvoker.AbstractProxyInvoker.doInvoke->Wrapper.invokeMethod->DemoServiceImpl.sayHello
MultiMessageHandler: 复合消息处理
HeartbeatHandler:心跳消息处理,接收心跳并发送心跳响应
AllChannelHandler:业务线程转化处理器,把接收到的消息封装成ChannelEventRunnable可执行任务给线程池处理
DecodeHandler:业务解码处理器

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 满足自动驾驶远程遥控的线控底盘整车控制器VCU

    满足自动驾驶远程遥控的线控底盘整车控制器VCU1 自动驾驶线控底盘VCU功能介绍满足自动驾驶及遥控驾驶的线控底盘整车控制器VCU作为新能源及自动驾驶电动汽车的核心主控制单元,通过硬线或CAN等方式与自驾仪、电机控制器MCU、电池管理系统BMS、线控转向、线控制动、线控灯光等…...

    2024/4/24 11:18:41
  2. 六自由度机械臂的solidworks模型图及分享

    之前曾经在一个机械臂制造商的网站上浏览过一款机械臂 华数603桌面级六自由度机械臂。 于是便想使用该款机械臂来学习ros。 于是我便使用了solidworks将这款机械臂按照一比一的比例画了出来,但是长度的数据是完全一致的,便于在gazebo仿真。 下面将图贴上,需要该款资源的朋友…...

    2024/5/7 4:51:56
  3. 最长子序列\子串相关问题

    子序列:不一定连续 子串:一定连续 最长连续序列—Leetcode.128 题目描述:给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 答: map的复杂度超了,unordered_map存元素和下标,逐个计算以该点为起点的最长元素; class Solution { publi…...

    2024/4/24 11:18:39
  4. HashMap相关问题及解析

    前言:看了一些HashMap的相关视频和学习资料,一直在搞项目,这个知识点搁置有一段时间了,学习嘛,就是要自己动手做,动手写今天就脑子里的东西来回忆一下,一起记忆一下知识点以及针对HashMap的常见问题这就不解析源码了,如果喜欢看源码的就等着啥时候有时间了,在做一个纯…...

    2024/4/24 11:18:39
  5. Redis基础介绍

    简单的说就是11225531,单进程单线程,两种实现方式,两种数据保存模式,五种数据结构,五种数据类型,三种特性,一个文件单进程单线程模式避免线程上下文切换和CPU切换,免去加解锁的麻烦。 保存数据有两种方式:快照模式(Snapshot,定时快照,定量快照),写模式(Append O…...

    2024/4/24 11:18:37
  6. IntelliJ IDEA平台下JNI编程全解

    文章目录1、前言2、搭建gcc编译环境3、编写Java代码 1、前言 众所周知,Java语言是基于虚拟机的解释性语言(Java代码经过编译器编译之后并不是能够直接在机器上执行的二进制代码,而是JVM虚拟机能够识别的字节码,依靠Java虚拟机进行解释执行)。而C/C++是编译型语言(编译完成…...

    2024/5/1 16:37:03
  7. MySQL中文字符串编码处理和R语言批量插入数据到数据库

    数据库支持中文字符 1.进入数据库 mysql -u root -p **** 2.查看所有的 编码字符 show variables like’%char%’; 这里需要注意两个地方:character_set_client 和 character_set connection ,这两个地方一定要是gbk; 3、修改mysq为正常的编码方法 mysql>set character_s…...

    2024/4/24 11:18:35
  8. SVG_38_path标签之字母Q_二次贝塞尔曲线

    昨天的文章中用到了三次贝塞尔曲线--SVG_37_六一儿童节快乐-路径移动-火焰文字,那么接下来几篇文章围绕着贝塞尔曲线说明一下。相对于circle、rect、ellipse、polygon等固定的图形,在绘制曲线时,line是一条直线,polyline是折线,而path标签代表了圆滑。path标签可以很灵活的…...

    2024/5/6 19:50:12
  9. PTA刷题Advanced甲级——1008.Elevator——Day(4)

    问题描述题目翻译: 电梯上一层花费时间为6s,下一层花费时间为4s,每到达一层都会停留5s,给出一段序列,第一个数字代表电梯停的次数,然后依次输入电梯所停楼层。 题目分析 因为每停一次就会花费五秒钟,所以我们将第一个输入的数字N乘以5,先算出停留时间。边输入边计算当前…...

    2024/4/24 11:18:40
  10. java8 新特性 - Optional类

    Optional类到目前为止,臭名昭著的空指针异常时导致java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检测空指针的方式来防止代码污染,他鼓励程序员写更干净的代码。收到Google Guava的启发,Optional类已…...

    2024/4/24 11:18:32
  11. LeetCode力扣 88. 合并两个有序数组 Merge Sorted Array 题解代码 JavaScript

    问题 https://leetcode-cn.com/problems/merge-sorted-array/练习使用JavaScript解答/*** @param {number[]} nums1* @param {number} m* @param {number[]} nums2* @param {number} n* @return {void} Do not return anything, modify nums1 in-place instead.*/ var merge = …...

    2024/4/15 5:12:45
  12. 分布式文件系统--ceph

    概述 ceph是一种专为高性能、高可靠性和高扩展性而设计的一种统一的分布式文件系统。随着OpenStack日渐成为开源云计算的标准软件栈,ceph也成为了OpenStack的首选后端存储,因为它支持块存储和对象存储,所以很自然地被用作云计算框架的整个存储后端,当然也可以单独作为存储,…...

    2024/4/28 18:26:36
  13. 埃氏筛法生成质数序列

    import matplotlib.pyplot as plt import numpy as np# np.arange()函数返回一个有终点和起点的固定步长的排列,如[1,2,3,4,5],起点是1,终点是100,默认步长为1 a = np.arange(1, 101) # 埃拉托斯特尼筛法,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。 n_max =…...

    2024/4/28 20:40:16
  14. Fabric 2.0 之账本(Ledger)

    参考资料(官方文档):Ledger Ledger在Hyperledger Fabric里面,账本由两个不同但相关的部分组成:世界状态(world state)和区块链(blockchain).世界状态数据库保存了账本中最新的值,世界状态使程序可以直接访问当前状态数据库的值,无需遍历所有的交易日志。世界状态可以频繁更…...

    2024/4/28 23:57:41
  15. MySQL - 43 8.0新特性串讲

    MySQL 8.0简介 MySQL 8.0.0于2016年9月12日发布,这是一个开发里程碑版本。MySQL 8.0的前一个版本是 MySQL 5.7,官方表示MySQL 8.0的速度要比MySQL 5.7快2倍, MySQL 8.0为读/写工作负载、 I/O密集型工作负载和高竞争“热点”工作负载提供了更好的性能。更多关于MySQL 8.0的信…...

    2024/4/27 23:25:51
  16. centos7.2软件安装

    centos7.2软件安装一.软件安装1.centos 7.2 创建1.1 下载镜像1.2 创建过程1.3 设置静态ip2. MySql 5.72.1 到mysql的官网下载yum repo配置文件(因为centos的yum源中没有MySQL)2.2 使用yum命令即可完成MySQL安装2.3 登录MySQL2.4 登录成功后修改密码2.5 修改密码2.6 开启远程控…...

    2024/4/28 22:35:45
  17. 【图解】卡尔曼滤波器是如何工作的

    本文转载于Bzarg所写博客,点击这里可以查看原文!我忍不住想和您分享一些关于卡尔曼滤波器的事情,因为它的作用实在是太不可思议了。出乎意料的是,几乎没有软件工程师和科学家对此有所了解,这让我感到很难过,因为它真的是在不确定情况下组合信息的通用且强大的工具。有时,…...

    2024/4/28 15:09:58
  18. Java学习——接口

    接口要点:代码块一: package Testinterface;/*** 这是一个飞行接口*/public interface Volant {/*** 飞行器的最大高度*/int MAX_HIGHT = 1000; //编译器自动补充 public static final/*** 飞行方法,可以起飞*/void fly();/*** 暂停飞行*/void stop(); …...

    2024/4/28 6:22:46
  19. 嵌入式系统设计中你所不知的经验法则

    目录引言通用设计成本计划硬件软件重用优化红旗及问题范畴打断/中断进一步阅读 本文为译文,原作者:PHILLIP JOHNSTON 菲利普 约翰斯顿,发表在Embedded artistry。 下文为节选原文章中个人感觉不错的地方,不足之处还请多多指教。 引言 ​ 本文可称之为指导方针、启发法或经…...

    2024/4/28 17:36:58
  20. Java工程师成神之路

    一、基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://ifeve.com/jmm-faq/ 1.1.2. 了解JVM各种参数及调优 1.1.3. 学习使用Java工具 jps, jstack, jmap, jconsole, jinfo, jhat, javap, … http://ke…...

    2024/4/28 4:31:13

最新文章

  1. 大数据技术概述_2.大数据面临的5个方面的挑战

    1. 大数据面临着5个主要问题 2012年冬季&#xff0c;来自IBM、微软、谷歌、HP、MIT、斯坦福、加州大学伯克利分校、UIUC等产业界和学术界的数据库领域专家通过在线的方式共同发布了一个关于大数据的白皮书。该白皮书首先指出大数据面临着5个主要问题&#xff0c;分别是异构性&a…...

    2024/5/7 11:30:06
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. 华为海思2024春招数字芯片岗机试题(共9套)

    huawei海思2024春招数字芯片岗机试题(共9套&#xff0c;有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;WX:didadidadidida313&#xff0c;加我备注&#xff1a;CSDN huawei数字题目&#xff0c;谢绝白嫖哈&#xff09…...

    2024/5/6 8:43:05
  4. 【APUE】网络socket编程温度采集智能存储与上报项目技术------多路复用

    作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…...

    2024/5/6 2:28:08
  5. ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?

    前言 ASP.NET Core 内置的标识&#xff08;identity&#xff09;框架&#xff0c;采用的是 RBAC&#xff08;role-based access control&#xff0c;基于角色的访问控制&#xff09;策略&#xff0c;是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...

    2024/5/5 15:45:29
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57