介绍
本篇内容主要讲解“网状的在达博中使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“网状的在达博中使用实例分析”吧!
当配置如下信息时
<节>& 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 网状的在达博中使用实例分析