dubbo后缀文件|dubbo配置文件中register="false" 什么意思

|

A. bbo配置文件中register="false" 什么意思

register="true"时才能通过zookeeper找到相应接口的实现(由provider配置)如果配置成register="false",表示当前系统的服回务不发布到答注册中心,部署到生产后,web端会无法启动服务,在使用该接口的controller里会报错。

B. bbo是如何启动的

已知,在项目启动过程中,我们会将bbo的配置文件写到spring的配置文件里,如下xml文件:

<bbo:application name="anyname_provider" /><!– 使用zookeeper注册中心暴露服务地址 –><bbo:registry address="zookeeper://127.0.0.1:2181" /><!– 用bbo协议在20880端口暴露服务 –><bbo:protocol name="bbo" port="20880" /><!– 声明需要暴露的服务接口 –><bbo:service interface="com.shxz130.provider.Provider"ref="demoService" />

从官方文档中,我们能看到如下:

启动过程.png

也就是说spring启动过程中,随着Spring在初始化过程中,碰到bbo命名的标签,如(<bbo:service>,<bbo:registry>)等标签,会由DubboNamespaceHandler类处理,具体原理见链接Spring自定义标签

DubboBeanDefinitionParser代码如下:

public class DubboNamespaceHandler extends NamespaceHandlerSupport { static {Version.checkDuplicate(DubboNamespaceHandler.class);} public void init() {registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));registerBeanDefinitionParser("mole", new DubboBeanDefinitionParser(MoleConfig.class, true));registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));registerBeanDefinitionParser("annotation", new ());}}

遇到不同的标签,会由不同的Parser处理,这里重点看服务发布,这行代码:

registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));

也就是说,当Spring容器处理完<bbo:service>标签后,会在Spring容器中生成一个ServiceBean ,服务的发布也会在ServiceBean中完成。不妨看一下ServiceBean的定义:

public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEvent>, BeanNameAware {}

该Bean实现了很多接口,关于InitializingBean,DisposableBean,ApplicationContextAware,BeanNameAware,这些接口的使用介绍如下链接:

InitializingBean&DisposableBean

BeanNameAware& ApplicationContextAware

而在Spring初始化完成Bean的组装,会调用InitializingBean的afterPropertiesSet方法,在Spring容器加载完成,会接收到事件ContextRefreshedEvent,调用ApplicationListener的onApplicationEvent方法。

在afterPropertiesSet中,和onApplicationEvent中,会调用export(),在export()中,会暴露bbo服务,具体区别在于是否配置了delay属性,是否延迟暴露,如果delay不为null,或者不为-1时,会在afterPropertiesSet中调用export()暴露bbo服务,如果为null,或者为-1时,会在Spring容器初始化完成,接收到ContextRefreshedEvent事件,调用onApplicationEvent,暴露bbo服务。

部分ServiceBean的代码如下:

public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener<ContextRefreshedEvent>, BeanNameAware { //Spring容器初始化完成,调用public void onApplicationEvent(ContextRefreshedEvent event) { if (isDelay() && !isExported() && !isUnexported()) { if (logger.isInfoEnabled()) { logger.info("The service ready on spring started. service: " + getInterface()); } //暴露服务 export(); } } //判断是否延迟发布private boolean isDelay() { Integer delay = getDelay(); ProviderConfig provider = getProvider(); if (delay == null && provider != null) { delay = provider.getDelay(); } return supportedApplicationListener && (delay == null || delay == -1); } //当bean初始化完成调用public void afterPropertiesSet() throws Exception { //……此处省略10000行代码 if (!isDelay()) { //暴露服务 export(); } }}

在export(),暴露服务过程中,如果发现有delay属性,则延迟delay时间,暴露服务,如果没有,则直接暴露服务。

public synchronized void export() { //忽略若干行代码 if (delay != null && delay > 0) { //当delay不为null,且大于0时,延迟delay时间,暴露服务 delayExportExecutor.schele(new Runnable() { public void run() { //暴露服务 doExport(); } }, delay, TimeUnit.MILLISECONDS); } else { //直接暴露服务 doExport(); } }

而在doExport()中,验证参数,按照不同的Protocol,比如(bbo,injvm)暴露服务,在不同的zookeeper集群节点上注册自己的服务。

protected synchronized void doExport() { //忽略10000行代码 doExportUrls(); //忽略10000行代码 } private void doExportUrls() { List<URL> registryURLs = loadRegistries(true); for (ProtocolConfig protocolConfig : protocols) { //按照不同的Protocal暴露服务 doExportUrlsFor1Protocol(protocolConfig, registryURLs); } }

作者:一滴水的坚持链接:https://www.jianshu.com/p/7f3871492c71来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

C. eclipse jetty启动bbo 怎么配置

eclipse jetty启动

DUBBO安装配置注意事项

管理端:

记得更改TOMCAT的端口号,不然会和监控器的8080冲突(如何部署在同一机器)

bbo.properties 文件bbo.registry.address=zookeeper://x.x.x.x:2181bbo.admin.root.password=用户bbo.admin.guest.password=密码

=============

监控端:

bbo.properties文件

bbo.container=log4j,spring,registry,jettybbo.application.name=simple-monitorbbo.application.owner=#bbo.registry.address=multicast://224.5.6.7:1234#bbo.registry.address=zookeeper://127.0.0.1:2181#bbo.registry.address=redis://127.0.0.1:6379#bbo.registry.address=bbo://127.0.0.1:9090bbo.registry.address=zookeeper://x.x.x.x:2181bbo.protocol.port=7070bbo.jetty.port=8080bbo.jetty.directory=${user.home}/monitorbbo.charts.directory=${bbo.jetty.directory}/chartsbbo.statistics.directory=${user.home}/monitor/statisticsbbo.log4j.file=logs/bbo-monitor-simple.logbbo.log4j.level=WARN

在安装的时候,小峤同学遇到了一个妖怪的问题,就是监控端可能只能在JDK1.8以上的版本才能启动,在JDK1.7上启动时,老是说什么MONITOR进程已存在启动,然后就停了。

我直接注释相关的SHELL就搞定了。。

不知对不对。。

if [ -z "$SERVER_NAME" ]; thenSERVER_NAME=`hostname`fi#PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`#if [ -n "$PIDS" ]; then# echo "ERROR: The $SERVER_NAME already started!"# echo "PID: $PIDS"# exit 1#fiif [ -n "$SERVER_PORT" ]; thenSERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l` if [ $SERVER_PORT_COUNT -gt 0 ]; thenecho "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"exit 1fifi

D. 微服务初体验(二):使用Nacos作为配置中心并集成Dubbo

首先启动Nacos,按照上篇文章的步骤,启动Nacos服务和项目,访问Nacos的web页面。确保项目中的服务都注册到注册中心当中了。在application.yml同级目录下添加bootstrap.yml,在Spring boot项目中bootstrap.yml会比application.yml优先初始化,所以我们需要在bootstrap.yml中引入Nacos官方指定的配置文件即可(上篇文章中已经把Nacos作为配置中心的配置写入了application.yml,现在只需要把它从applicaiton.yml中剪切出来即可, 其中的spring:application:name会作为Nacos中新增配置时的Data ID,需要留意 ),再新增属性gorup进行分组测试,如下图

接着打开Nacos的服务的web页面,打开配置管理->配置列表,点击右侧新增按钮,进行新增。 Data ID: bootstrap.yml配置文件中spring:application:name对应的名称 ; Group:指定分组(便于不同环境下的项目配置管理,因为笔者这里属于测试,所以填写的是和上文中的配置文件中group对应的test一致); 描述:针对于该配置的描述; 配置格式:配置文件的格式,要和Data ID中的后缀格式一致(这里笔者用的是yml,那么下面就选择yaml,注意该位置也可以选择properties,但是必须和上面bootstrap.yml文件中的file-extension的值相匹配); 配置内容:具体的配置内容(这里笔者将项目中的application.yml中的配置全部拷贝至其中);

测试启动consumer服务,在application.yml中为空的时候,项目启动端口还是如Nacos配置中的9011,说明项目依赖Nacos的配置中心成功,其他服务如法炮制即可:

新增一个测试Controller,然后加上@RefreshScope注解,表明该Controller中的配置数据为自动刷新 。

编辑Nacos中的配置文件consumer新增相关参数type: test,访问Controller,返回test。效果如下图:

将Nacos中consumer.yml文件的type: test修改为type: prod,在不重启项目的情况下重新访问对应的controller,效果如下图:

因为Dubbo是属于各个服务之间都要公用的依赖,所以将其引入cloud-common当中,详细的版本可以去 mvnrepository 搜索合适自己项目的

引入依赖后需要编写消费者服务中的配置文件,将Dubbo服务注册至Nacos,新增如下内容,其中subscribed-services指的是生产者服务,prot:-1指的是端口随机,registry:address:指的是Dubbo对应的注册中心那这里就应该设置为Nacos

接下来新增接口服务,项目类型为Maven项目,在项目中新增一个接口。并在cloud-provider(生产者)和cloud-consumer(消费者)pom.xml文件中都引入该模块

在生产者实际服务中实现该接口对应的方法

在服务消费者的Controller中引入该Service,并在该Service上加入@Reference注解,注意在引入jar包的时候选择带有Dubbo的,不要使用Jdk原生的

编写消费者服务中测试Dubbo调用的接口,进行测试,测试结果如下图:

E. Dubbo(一)——Dubbo 集成于 Spring 的原理

最近一直在看bbo的源码部分。在阅读耐团的时候,需要有一个入手点,才能一点一点的进行下去。自己在研究的时候,发现思绪比较乱,于是就以 芋道源码 为基础,一点一点的啃食。芋道源码是直接从bbo的配置和一些核心的API开始讲起,是从bbo已经启动的过程作为开始节点岩亩猜,而这些核心 API 与 Spring 的之间的关系被省略了,这些东西对我来说属于前置的知识点,所以花了比较长的时间又从 Dubbo 的核心 API 倒着往前看。

在阅读 Dubbo 时,发现前置知识越来越多,如:Spring 的 refresh 中的一些核心点,Spring 中 bean 的生命周期,BeanFactory 与 FactoryBean 的区别等。所以这些前置知识花了特别多的时间去补。所幸,虽然补前置知识虽然时间长,但是性价比还是可以的。Dubbo 是依赖于Spring 的上下文环境的框架,其他依赖于 Spring 的框架也是相同的道理。Spring 的一些对外的扩展点,读过之后也会心中有数。

1、本篇主要是描述了 Dubbo 在 Spring 创建上下文的时候,是如何从创建,到能完整提供一个RPC调用能力的一些相关点。 2、由于源码比较多,直接贴断点也太过臃肿,所以仅仅贴一些关键点来概括整个流程。 3、本文是依赖于前面的 bbo 项目进行断点分析,项目结构可以参照这里。项目中 bbo 的配置方式是 xml 文件,所以本篇主要说 xml 配置方式。其他方式道理相同,并不是问题的关键点。

4、项目启动的是 bbo-user 服务,所以 UserService 为 bbo:service,OrderService 为 bbo:reference。

下图为Spring 启动时是如何加载 Dubbo 的,其中省略了大量过程,只保留了一些关键节点,省略的部分可以略微脑补一下。

整个流程的入口是 Spring 的 refresh 方法。每个方法都有比较深的调用栈。与 Dubbo 有关的入口是 refresh 中的 方法

这个方法是执行 beanFactory 的一些后处理操作,其核心流程为在Spring容器中找出实现了BeanFactoryPostProcessor接口的processor并执行。Spring容器会委托给的方法执行。 是比较核心的类,在这里我们关注一下这个类。它的作用是对项目中配置的类进行处理。具体处理粗型可以分为几步:

在加载类信息时,spring 会去用各种方式扫到注册的 bean 信息。我们在 spring 中注册的 bean,逃不出这个方法的扫描方式。 核心方法是:

扫描之后,会将扫描到的 bean 注册到 beanDefinitionMap 中

首先是此处 org.springframework.beans.factory.xml.#parseBeanDefinitions,可以看出方法会以配置文件根节点起,遍历所有子节点。

其次是这里 org.springframework.beans.factory.xml.BeanDefinitionParserDelegate#parseCustomElement(org.w3c.dom.Element, org.springframework.beans.factory.config.BeanDefinition), 此方法会通过解析出来的节点,获取对应的 Spring 的 namespaceUri ,进而获取对应的配置文件处理器。 此处 ele 参数实际值为 <bbo:service … />,namespaceUri 为 http://code.alibabatech.com/schema/bbo

我们看一下 resolve 方法中的细节。因为这个方法内部才是 Dubbo 依赖于 Spring 的关键点。

此处的 NamespaceHandler 为 DubboNamespaceHandler,再创建结束之后,进行 init 初始化。

可以看到,DubboNamespaceHandler 在初始化的时候,会创建所有 bbo 标签对应的Config 类的 DubboBeanDefinitionParser。并将 DubboBeanDefinitionParser 和 对应的 bbo 标签类注册到 NamespaceHandlerSupport 的 parsers 中。

最后,会在 com.alibaba.bbo.config.spring.schema.DubboBeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext, java.lang.Class<?>, boolean) 方法中进行处理

Dubbo 服务比较特殊,beanDefinition 跟普通的 bean 不太一样。在向 beanDefinitionMap 注册时,普通的 beanDefinition 的 beanName 与 beanClass 是对应的;而 bbo 服务的 beanDefinition 的 beanName 是bbo 服务的名称,beanClass 为 bbo 对应的 Bean。

普通的 beanDefinition:

bbo 引用的服务的 beanDefinition:

这一步的核心流程是从 beanFactory 中获取所有的 ApplicationListener,然后注册到监听器集合中。它的关键点其实是 ServiceBean。因为 ServiceBean 是 ApplicationListener 的实现。

所以 beanFactory 中 ServiceBean 也会被注册到监听器集合中。项目中的 ServiceBean 的 beanClass 实际是 UserService。

这一步的核心点,主要是创建剩余的各类对象,并将其保存到 singletonObjects 中。其中关联的前置知识为 Spring 中 bean 的生命周期 。它的核心方法是: org.springframework.beans.factory.support.#doCreateBean

它的具体流程为:

ps:此处并不是只有这一步才会跟 bean 生命周期相关,bean 生命周期贯穿在 refresh 的很多流程中,只要执行doGetBean 方法,都会走这个流程。此处仅仅借楼关联一下。

这一步的核心点,是通知所有的监听器上下文刷新结束的事件。在这一步执行时,会通知到 ServiceBean。

此处暴露的是 UserService。

Dubbo 的启动条件是完全依赖于 Spring 的启动流程,Spring 的启动流程中核心的点是 refresh 方法。所以只要搞懂 refresh 方法,其他的拓展框架流程也会明白。只不过关联的知识点太多了,还是需要时间的积累才能一点一点的搞懂。 如果本篇有描述不清,或者描述有误的地方,还望在下方留言,大家一起交流,一起学习,一起进步~

F. Dubbo简介

Dubbo是Alibaba开源的分布式服务框架,它按照分层的方式来架构,使用这种方式可以使各层解耦。 Dubbo在调用远程的服务的时候再本地有一个接口,就想调用本地方法一样去调用,底层实现好参数传输和远程服务运行结果传回之后的返回。 Dubbo的特点: (1)它主要使用高效的网络框架和序列化框架,让分布式服务之间调用效率更高。 (2)采用注册中心管理众多的服务接口地址,当你想调用服务的时候只需要跟注册中心询问即可,不像使用WebService一样每个服务都得记录好接口调用方式。 (3)监控中心时实现服务方和调用方之间运行状态的监控,还能控制服务的优先级、权限、权重、上下线等,让整个庞大的分布式服务系统的维护和治理比较方便。 (4)高可用,如果有服务挂了,注册中心就会从服务列表去掉该节点,客户端会像注册中心请求另一台可用的服务节点重新调用。同时注册中心也能实现高可用(ZooKeeper)。 (5)负载均衡,采用软负载均衡算法实现对多个相同服务的节点的请求负载均衡。 Dubbo需要四大基本组件:Rigistry,Monitor,Provider,Consumer。1、监控中心的配置文件-bbo.properties文件 (1)容器,监控中心是在jetty和spring环境下运行,依赖于注册中心,日志系统是log4j     bbo.container = log4j,spring,registry,jetty (2)监控服务的名称,监控系统对整个Dubbo服务系统来说也是一个服务     bbo.application.name = simple-monitor (3)服务的所有者,这是Dubbbo的服务的功能,可以指定服务的负责人     bbo.application.owner = coselding (4)注册中心的地址,配置后监控中心就能通过注册中心获取当前可用的服务列表及其状态,在页面向你汇报Dubbo中的服务运行情况。     bbo.registr.address = multicast://{ip}:{port} //广播     bbo.registr.address = zookeeper://{ip}:{port} //zookeper     bbo.registr.address = redis://{ip}:{port} //redis     bbo.registr.address = bbo://{ip}:{port} //bbo (5)bbo协议端口号     bbo.protocol.port = 7070 (6)jetty工作端口号     bbo.jetty.port = 8082 (7)工作目录,用于存放监控中心的数据     bbo.jetty.directory = ${user.home}/monitor (8)监控中心报表存放目录     bbo.charts.directory=${bbo.jetty.directory}/charts (9)监控中心数据资料目录     bbo.statistics.directory=${user.home}/monitor/statistics (10)监控中心日志文件路径     bbo.log4j.file=logs/bbo-monitor-simple.log (11)监控中心日志记录级别     bbo.log4j.level=WARN 2、Dubbo提供负载均衡方式 (1)Random,随机,按权重配置随机概率,调用量越大分布越均匀,默认方式。 (2)RounRobin,轮询,按权重设置轮询比例,如果存在比较慢的机器容易在这台机器上请求阻塞较多。 (3)LeastActive,最少活跃调用数,不支持权重,只能根据自动识别的活跃数分配,不能灵活调配。 (4)ConsistenHash,一致性hash,对相同参数的请求路由到一个服务提供者上,如果有类似灰度发布需求可采用。 3、Dubbo过滤器 Dubbo初始化过程加载ClassPath下的META-INF/bbo/internal/,META-INF/bbo/,META-INF/services/三个路径下的com.alibaba.bbo.rpc.Filter文件。文件内容:     Name = FullClassName,这些类必须实现Filter接口。自定义Filter类: 配置文件在配置过滤器,consumer.xml中:Dubbo对过滤器的加载过程:     先加载三个路径下的com.alibaba.bbo.rpc.Filter文件里面的键值对,key为过滤器名称,value为过滤器的类的全限定名(这个类必须实现Dubbo中的Filter接口)。     自定义的类中@Active注解是过滤器设定的全局基本属性。     Spring在加载consumer.xml文件时,通过 <bbo:consumer filter="xxx" id = "xxx" retrries = "0">这个配置指定消费者端要加载的过滤器,通过filter属性指定过滤器名称。 @Activate注解-自动激活,group属性是表示匹配了对应的角色才被加载,value表示表明过滤条件,不写则表示所有条件都会被加载,写了则只有bbo URL中包含该参数名且参数值不为空才被加载,这个参数会以bbo协议的一个参数K-V对传到Provider。 4、Dubbo的Provider配置 5、Dubbo的Consumer配置 1、Dubbo是什么? Dubbo是阿里巴巴开源的基于Java的高性能RPC分布式框架。 2、为什么使用Dubbo? 很多公司都在使用,经过很多线上的考验,内部使用了Netty,Zookeeper,保证了高性能可用性。 使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可以提高业务复用灵活性扩展,使前端应用能快速的响应对边的市场需求。分布式架构可以承受更大规模的并发流量。 Dubbo的服务治理图: 3、Dubbo和Spring Cloud的区别 两个没有关联,但是非要说区别,有如下几点: (1)通信方式不同,Dubbo使用RPC通信,Spring Cloud使用HTTP Restful方式 (2)组成部分不同4、Dubbo支持的协议 bbo://  (推荐);rmi:// ;hessian:// ;http:// ;webservice:// ;thrift:// ;memcached:// ;redis:// ;rest:// 。 5、Dubbo需要容器吗? 不需要,如果硬要容器的话,会增加复杂性,同时也浪费资源。 6、Dubbo内置的服务容器 Spring Container;Jetty Container;Log4j Container。 7、Dubbo中节点角色 Register,Monitor,Provider,Consumer,Container(服务运行的容器)。 8、Dubbo的服务注册和发现的流程图 9、Dubbo的注册中心 默认使用Zookeper作为注册中心,还有Redis,Multicast,bbo注册中心。 10、Dubbo的配置方式 Spring配置方式和Java API配置方式 11、Dubbo的核心配置 (1)bbo:service 服务配置 (2)bbo:referece 引用配置 (3)bbo:protocol 协议配置 (4)bbo:application 应用配置 (5)bbo:registry 注册中心配置 (6)bbo:monitor 监控中心配置 (7)bbo:provider 提供方配置 (8)bbo:consumer 消费方配置 (9)bbo:method 方法配置 (10)bbo:argument 参数配置 12、在Provider 节点上可以配置Consumer端的属性有哪些? (1)timeout:方法调用超时 (2)retries:失败重试次数,默认是2次 (3)loadbalance:负载均衡算法,默认随机 (4)actives消费者端,最大并发调用控制 13、Dubbo启动时如果依赖的服务不可用会怎样 Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。默认check ="true"。 14、Dubbo序列化框架 推荐使用Hessian序列化,还有Dubbo,FastJson,Java自带序列化。 15、Dubbo的通信框架 默认使用Netty框架,另外也提供了Mina,Grizzly。 16、Dubbo集群容错方案 (1)Failover Cluster,失败自动切换,自动重试其他服务器。 (2)Failfast Cluster,快速失败,立即报错,只发起一次调用。 (3)Failsafe Cluster,失败安全,出现异常时,直接忽略。 (4)Failback Cluster,失败自动恢复,记录失败请求,定时重发。 (5)Forking Cluster,并行调用多个服务器,只要一个返回成功即可。 (6)Broadcast Cluster,广播逐个调用所有提供者,任意一个报错则报错。 17、Dubbo的负载均衡策略 (1)Random LoadBalance,随机,按权重设置随机概率,默认。 (2)RoundRobin LoadBalace,轮询,按公约后的权重设置轮训比例。 (3)LeastActive LoadBalace,最少活跃调用数,相同活跃数的随机。 (4)ConsistenHash LoadBalance,一致性hash,相同参数的请求总是发到用一个服务器。 18、指定某一个服务 可以配置环境点对点直连,绕过注册中心,将以服务接口为单位,忽略注册中心的提供者列表。 <bbo:reference interface="com.weidian.bbo.IMyDemo" version="1.0" id="myDemo" url="bbo://127.0.0.1:20880/"></bbo:reference> 19、Dubbo多协议 Dubbo允许配置多协议,在不同服务器上支持不同协议,或者同一服务支持多种协议。 20、当一个服务有多种实现时怎么做? 当一个接口有多种是现实,可以用group属性来分组,服务提供方和消费方都指定同一个group即可。 21、兼容旧版本 使用版本号过度,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。 22、Dubbo可以缓存吗? Dubbo提供声明式缓存,用于加速热门数据的访问速度,以减少用户加缓存的工作量。 23、Dubbo服务之间的调用时阻塞的吗? 默认是同步等待结果阻塞的,支持异步调用。Dubbo是基于NIO的非阻塞实现并行调用的,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个Future对象。 24、Dubbo不支持分布式事务 25、Dubbo必须依赖的包 Dubbo必须依赖JDK,其他为可选。 26、Dubbo使用过程中的问题 Dubbo的设计目的是为了满足高并发小数据量的rpc请求,在大数据量下性能表现不是很好,建议使用rmi或http协议。 27、Dubbo的管理控制台的作用 路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡。 28、Spring boot整合Dubbo (1)添加依赖         <!– https://mvnrepository.com/artifact/com.alibaba.boot/bbo-spring-boot-project –>         <dependency>             <groupId>com.alibaba.boot</groupId>             <artifactId>bbo-spring-boot-starter</artifactId>             <version>0.1.0</version>         </dependency>         <!– https://mvnrepository.com/artifact/com.101tec/zkclient –>         <dependency>             <groupId>com.101tec</groupId>             <artifactId>zkclient</artifactId>             <version>0.10</version>         </dependency>(2)配置bbo     ## Dubbo 服务提供者配置     spring.bbo.application.name=provider     spring.bbo.registry.address=zookeeper://127.0.0.1:2181     spring.bbo.protocol.name=bbo     spring.bbo.protocol.port=20880     spring.bbo.scan=org.spring.springboot.bbo    ## Dubbo 服务消费者配置     spring.bbo.application.name=consumer     spring.bbo.registry.address=zookeeper://127.0.0.1:2181     spring.bbo.scan=org.spring.springboot.bbo


赞 (0)