网状的在达博中使用实例分析

  介绍

本篇内容主要讲解“网状的在达博中使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“网状的在达博中使用实例分析”吧!

当配置如下信息时

<节>
 & lt;达博:application  name=癷nfuq-dubbo-provider",/祝辞& lt;达博:registry 协议=皕ookeeper",地址=?27.0.0.1:2181",检查=癴alse",/祝辞& lt;达博:protocol  name=癲ubbo",端口=?0880“,线程=?00“/祝辞& lt;达博:service  ref=皅ueryUserInfoFacade",界面=癱om.infuq.facade.QueryUserInfoFacade", version=?.0.0",/祝辞& lt; bean  id=皅ueryUserInfoFacade",类=癱om.infuq.facade.impl.QueryUserInfoFacadeImpl",/在
  

春在启动的过程中,通过DubboNamespaceHandler解析上面的标签。

将每个标签与之对应的BeanDefinition注册到BeanFactory中。

春天再根据BeanDefinition生成对应的Bean实例。

上面的& lt;达博:服务/祝辞标签最终会生成对应的ServiceBean实例。

<节>
//,源码位置:,com.alibaba.dubbo.config.spring.ServiceBeanpublic  class  ServiceBean, extends  ServiceConfig, implements  InitializingBean,, DisposableBean,,,,,,,,,,, ApplicationContextAware ApplicationListener,, BeanNameAware,,,,,,,,, ApplicationEventPublisherAware  {,,,,,,,,,} 
  

ServiceBean实现了ApplicationListener接口。

在春天创建完所有的豆之后,最后会发布一个ContextRefreshedEvent事件。

因此ServiceBean的onApplicationEvent()方法会被执行。

<节>
 public  void  onApplicationEvent (ContextRefreshedEvent 事件),{,,,if  (isDelay (),,,, ! isExported (),,,, ! isUnexported ()), {,,,,,,, if  (logger.isInfoEnabled ()), {,,,,,,,,,,, logger.info (“, service  ready 提醒spring 开始只服务:,“,+,getInterface()),,,,,,,,,},,,,,,,,//,暴露服务,,,,,,,,出口(),,,,,}}
  

接下来就进入到了服务暴露的过程。

服务暴露会完成两件事情。第一件事情是通过网状的开启服务,监听端口。

第二件事情是将服务注册到注册中心。

跟进出口()方法,最后会来到DubboProtocol类。

大体看下它是如何开启服务,监听端口?留意下,有个属性requestHandler。

<节>
 <代码>公共类DubboProtocol延伸AbstractProtocol{ <代码>,,private  ExchangeHandler  requestHandler =, new  ExchangeHandlerAdapter(),{,,},  <代码> 
<代码>,,private  ExchangeServer  createServer (URL  url),{ <代码>,,,,//,绑定 <代码>,服务器=转化器。代码绑定(url, requestHandler); <代码>,} <代码>
<代码>}
  

跟进绑定()方法,最后会来到NettyServer的doOpen()方法只

留意下,有个属性nettyServerHandler。

<节>
 <代码>//源码位置:com.alibaba.dubbo.remoting.transport.netty4.NettyServer  <代码>保护无效doOpen()抛出Throwable{ <代码>,,引导=new ServerBootstrap();  <代码> 
<代码>,,bossGroup=new NioEventLoopGroup(1、新DefaultThreadFactory (“NettyServerBoss",真)); <代码>,,workerGroup=new NioEventLoopGroup (getUrl () .getPositiveParameter(常量。IO_THREADS_KEY Constants.DEFAULT_IO_THREADS),新DefaultThreadFactory (“NettyServerWorker"真实)); <代码>
<代码>,,,,//,重要的处理程序代码 <代码>,最后,NettyServerHandler NettyServerHandler=new NettyServerHandler (getUrl(),这个); <代码>,,渠道=nettyServerHandler.getChannels(); <代码>
<代码>,引导。集团(bossGroup workerGroup) <代码>,,,,,代码,.channel (NioServerSocketChannel.class) <代码>,,,,,.childOption (ChannelOption。TCP_NODELAY Boolean.TRUE) <代码>,,,,,.childOption (ChannelOption。SO_REUSEADDR Boolean.TRUE) <代码>,,,,,.childOption (ChannelOption。分配器,PooledByteBufAllocator.DEFAULT) <代码>,,,,,,。childHandler(新的ChannelInitializer(){ <代码>,,,,,,,代码,@Override <代码>,,,,,,,,保护无效initChannel (NioSocketChannel ch)抛出异常{ <代码>,,,,,,,,,null   null   null

网状的在达博中使用实例分析