@dubboservice(@dubboservice什么意思)
本篇文章给大家谈谈@dubboservice,以及@dubboservice什么意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
怎么用注解的方式发布dubbo服务
使用 @com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的租竖察时候,当服务类没有加入@Transactional的时候没有问题.
但是当加入事务纤汪后【@Transactional】, dubbo的 AnnotationBean 扫描 类弊茄执行下面的代码的时候就获取不到对应的注解,也就发布不了服务。
究其原因,是因为Dubbo提供的注解没有@Inherited元注解。
我们通过@Transactional标注过的Service产生一个代理类,这个代理类有两种生成方式。一种是jdk动态代理,一种是CGLib动态代理。
jdk动态代理生成的代理类与当前类共同实现相同的接口,所以与当前类也只是间接调用的关心,不在此次讨论范围。
CGLib生成的代理类为当前Service的子类,可以集成到当前Service的注解。
根据需求,我们需要更改Dubbo的源码
在Dubbo的Service注解上加上@Inherited,使这个注解变成可继承的。
然后再当前项目的spring的主配置文件中强制所有bean使用CGLib代理
这样服务即可正常发布。
[img]webservice和dubbo service的区别是什么?
他俩其实没什么大区别,只不过dubbo可以和Spring框架无轿慎局缝集成。
1、Web service是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同孝者平台的应用服务可以互操作。根据W3C的定义,Web服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。
网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如Internet的远程服务器端,执行客户所提交服闭让务的请求。无论定义还是实现,WEB服务过程中会由服务器提供一个机器可读的描述以辨识服务器所提供的WEB服务。
另外,虽然WSDL不是SOAP服务端点的必要条件,但目前基于Java的主流WEB服务开发框架往往需要WSDL实现客户端的源代码生成。一些工业标准化组织就在WEB服务定义中强制包含SOAP和WSDL。
2、Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC 实现服务的输 出和输入功能,可以和 Spring框架无缝集成。
dubbo服务暴露
dubbo:service/ 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。
eg、dubbo:service ref="demoService" interface="com.xxx.xxx.provider.DemoService" /
dubbo:reference/ 引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。
eg、dubbo:reference id="demoService" interface="com.xxx.xxx.provider.DemoService" /
dubbo:protocol/ 协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
eg、dubbo:protocol name="dubbo" port="20880" /
dubbo:application/ 应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
eg、dubbo:application name="provider" /
dubbo:module/ 模块配置,用于配置当前模块信息,可选。困哗岁
dubbo:registry/ 注册中心配置,用于配芦渗置连接注册中心相关信息。
eg、dubbo:registry address=" zookeeper://192.168.2.249:2181 " /
dubbo:monitor/ 监控中心配置,用于配置连接监控中心相关信息,可选。
dubbo:provider/ 提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选。
dubbo:consumer/ 消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选。
dubbo:method/ 方法配置,用于ServiceConfig和ReferenceConfig指定方法汪睁级的配置信息。
dubbo:argument/ 用于指定方法参数配置。
Invoker URL ServiceBean
URL 之于 Dubbo,犹如水之于鱼,非常重要。
在 Dubbo 中,Invoker 是一个非常重要的模型。在服务提供端,以及服务引用端均会出现 Invoker。Dubbo 官方文档中对 Invoker 进行了说明,这里引用一下。
Invoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
1.概览
dubbo:service/ → ServiceConfig→Invoker→ Exporter-启动server打开端口-注册
[图片上传失败...(image-aaadb7-1562576327193)]
[图片上传失败...(image-ff9460-1562576327192)]
导出时机:
afterPropertiesSet
onApplicationEvent
为什么要延迟暴露
导出了什么东西
怎么导出的
导出的入口
org.apache.dubbo.config.ServiceConfig#export
检查配置举个例子 protocol
如果为空就set,然后增加属性
[图片上传失败...(image-819df9-1562576327192)]
[图片上传失败...(image-10b9e0-1562576327192)]
[图片上传失败...(image-3c064c-1562576327192)]
org.apache.dubbo.config.AbstractInterfaceConfig#loadRegistries的registries什么时候注入的?提出问题
org.springframework.beans.factory.BeanFactoryUtils#beansOfTypeIncludingAncestors(org.springframework.beans.factory.ListableBeanFactory, java.lang.ClassT, boolean, boolean)
这里获取默认的配置 扩展IOC
双注册中心
haunt 资料
org.apache.dubbo.config.ServiceConfig#doExportUrlsFor1Protocol
1.将一些信息,比如版本、时间戳、方法名以及各种配置对象的字段信息放入到 map 中,map 中的内容将作为 URL 的查询字符串。构建好 map 后,紧接着是获取上下文路径、主机名以及端口号等信息。最后将 map 和主机名等数据传给 URL 构造方法创建 URL 对象。
[图片上传失败...(image-70bad3-1562576327192)]
3.暴露本地服务org.apache.dubbo.config.ServiceConfig#exportLocal
先看一下成员变量。使用spi
[图片上传失败...(image-53fddf-1562576327192)]
[图片上传失败...(image-d81aee-1562576327192)]
创建invoker的过程
[图片上传失败...(image-47e326-1562576327192)]
生成的protocol code
String extName = (url.getProtocol() == null ? "dubbo": url.getProtocol());
org.apache.dubbo.rpc.Protocol extension = (org.apache.dubbo.rpc.Protocol) ExtensionLoader.getExtensionLoader(org.apache.dubbo.rpc.Protocol.class).getExtension(extName);
最后得到
org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol
[图片上传失败...(image-d3033f-1562576327192)]
回忆getExtension的时候,对Protocol包装又包装。
build一个过滤链,启动一个服务质量监控服务器,增加一个监听者。
[图片上传失败...(image-93aad6-1562576327192)]
为什么要有本地暴露
本地调用使用了 injvm 协议,是一个伪协议,它不开启端口,不发起远程调用,只在 JVM 内直接关联,但执行 Dubbo 的 Filter 链。
org.apache.dubbo.registry.integration.RegistryProtocol#doLocalExport
org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol#openServer
[图片上传失败...(image-ffbf2d-1562576327192)]
[图片上传失败...(image-1fea4f-1562576327192)]
org.apache.dubbo.rpc.Protocol#export 远程暴露
org.apache.dubbo.registry.integration.RegistryProtocol#export
远程暴露第一步 交给具体的协议去暴露本地端口
org.apache.dubbo.registry.integration.RegistryProtocol#doLocalExport
→org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol#export(缓存exporter)
→org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol#openServer(缓存server)
[图片上传失败...(image-498383-1562576327192)]
第二步-注册
获取注册中心
org.apache.dubbo.registry.support.AbstractRegistryFactory#getRegistry
→org.apache.dubbo.registry.etcd.EtcdRegistryFactory#createRegistry
→org.apache.dubbo.remoting.etcd.jetcd.JEtcdTransporter#connect
[图片上传失败...(image-c652f9-1562576327192)]
org.apache.dubbo.remoting.etcd.support.AbstractEtcdClient#create
[图片上传失败...(image-3893ab-1562576327192)]
org.apache.dubbo.remoting.etcd.jetcd.JEtcdClientWrapper#createPersistent
[图片上传失败...(image-71c6f8-1562576327192)]
模板方法
重点是把dubbo的url转换成etcd的节点
为啥注册中心挂了,服务还能继续通信?
com.alibaba.dubbo.registry.RegistryService#subscribe
最后。官网的说明
URL举例
dubbo://172.17.48.52:20880/com.alibaba.dubbo.demo.DemoService?anyhost=trueapplication=demo-providerdubbo=2.0.2generic=falseinterface=com.alibaba.dubbo.demo.DemoServicemethods=sayHello
上图是服务提供者暴露服务的主过程:
首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl),然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。接下来就是 Invoker 转换到 Exporter 的过程。
Dubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程,上图中的红色部分。下面我们以 Dubbo 和 RMI 这两种典型协议的实现来进行说明:
Dubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的 export 方法,它主要是打开 socket 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现。
关于@dubboservice和@dubboservice什么意思的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。