A. bbo配置文件中register="false" 什么意思
register="true"时才能通过zookeeper找到相应接口的实现(由provider配置)如果配置成register="false",表示当前系统的服回务不发布到答注册中心,部署到生产后,web端会无法启动服务,在使用该接口的controller里会报错。
B. bbo实际应用是需要配置消费者吗
1. Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,bbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有bbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在bbo上注册)其核心部分包含:1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。2. Dubbo能做什么?1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。之前使用Web Service,我想测试接口可以通过模拟消息的方式通过soapui或LR进行功能测试或性能测试。但现在使用Dubbo,接口之间不能直接交互,我尝试通过模拟消费者地址测试,结果不堪入目,再而使用jmeter通过junit进行测试,但还是需要往bbo上去注册,如果再不给提供源代码的前提下,这个测试用例不好写啊….3. bbo的架构bbo架构图如下所示:节点角色说明:Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。Monitor: 统计服务的调用次调和调用时间的监控中心。Container: 服务运行容器。这点我觉得非常好,角色分明,可以根据每个节点角色的状态来确定该服务是否正常。调用关系说明:0 服务容器负责启动,加载,运行服务提供者。1. 服务提供者在启动时,向注册中心注册自己提供的服务。2. 服务消费者在启动时,向注册中心订阅自己所需的服务。3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。bbo的容错性显而易见,性能方面还没有还得及测,我们系统某页面需要掉5次接口,本来想建议做个缓存,但业务关系不能采纳,还需要研究下bbo的性能调优问题…4. bbo使用方法。Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐)下面我们就来看看spring配置方式的写法:服务提供者:1. 下载zookeeper注册中心,下载地址: 下载后解压即可,进入D:apach-zookeeper-3.4.5bin,双击zkServer.cmd启动注册中心服务。2. 定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)下面这个例子不错,写的很详细可以做个model.package com.unj.bbotest.provider; import java.util.List; public interface DemoService { String sayHello(String name); public List getUsers(); } 在服务提供方实现接口:(对服务消费方隐藏实现)package com.unj.bbotest.provider; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class DemoServiceImpl implements DemoService{ public String sayHello(String name) { return "Hello " + name; } public List getUsers() { List list = new ArrayList(); User u1 = new User(); u1.setName("jack"); u1.setAge(20); u1.setSex("男"); User u2 = new User(); u2.setName("tom"); u2.setAge(21); u2.setSex("女"); User u3 = new User(); u3.setName("rose"); u3.setAge(19); u3.setSex("女"); list.add(u1); list.add(u2); list.add(u3); return list; } } 用Spring配置声明暴露服务:<beans xmlns="" xmlns:xsi="" xmlns:bbo="" xsi:schemaLocation=" /spring-beans.xsd /bbo.xsd "> <!– 使用multicast广播注册中心暴露服务地址 –> 加载Spring配置,启动服务:package com.unj.bbotest.provider; import org.springframework.context.support.; public class Provider { public static void main(String[] args) throws Exception { context = new (new String[] {"applicationContext.xml"}); context.start(); System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟 } } 服务消费者:applicationContext-bbo.xml 中注册自己需要调用的接口,我刚开始测试的时候需要的接口很多,所以把这个文件写的满满的,后来熟悉了把接口按业务类型分开,写了N多个 applicationContext-bbo-***.xml 简练多了 》。 1.通过Spring配置引用远程服务: <beans xmlns="" xmlns:xsi="" xmlns:bbo="" xsi:schemaLocation=" /spring-beans.xsd /bbo.xsd "> <!– –> <bbo:reference id="demoService" interface="com.unj.bbotest.provider.DemoService" /> 2.加载Spring配置,并调用远程服务:package com.alibaba.bbo.demo.pp; import java.util.List; import org.springframework.context.support.; import com.unj.bbotest.provider.DemoService; public class Consumer { public static void main(String[] args) throws Exception { context = new ( new String[] { "applicationContext.xml" }); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); // String hello = demoService.sayHello("tom"); // ? System.out.println(hello); // // List list = demoService.getUsers(); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } // System.out.println(demoService.hehe()); System.in.read(); } }/
C. bbo server 怎么读取spring 配置文件
Dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止版Spring初始化完成,以权便上线时,能及早发现问题,默认check=true。 如果你的Spring容器是懒加载的,或者通过API编程延迟引用服务,请关闭check,否则服务临时不可用时
D. 如何更好地学习bbo源代码
1、Dubbo与Spring的整合 Dubbo在使用上可以做到非常简单,不管是Provider还是Consumer都可以通过Spring的配置文件进行配置,配置完之后,就可以像使用 spring bean一样进行服务暴露和调用了,完全看不到bbo api的存在。这是因为bbo使用了spring提供的可扩展Schema自定义配置支持。在spring配置文件中,可以像、这样进行配置。 META-INF下的spring.handlers文件中指定了bbo的xml解析类:DubboNamespaceHandler。像前面的被解 析成ServiceConfig,被解析成ReferenceConfig等等。 2、jdk spi扩展 由于Dubbo是开源框架,必须要提供很多的可扩展点。Dubbo是通过扩展jdk spi机制来实现可扩展的。具体来说,就是在META-INF目录下,放置文件名为接口全称,文件中为key、value键值对,value为具体实现类 的全类名,key为标志值。由于bbo使用了url总线的设计,即很多参数通过URL对象来传递,在实际中,具体要用到哪个值,可以通过url中的参 数值来指定。 Dubbo对spi的扩展是通过ExtensionLoader来实现的,查看ExtensionLoader的源码,可以看到Dubbo对jdk spi做了三个方面的扩展:(1)jdk spi仅仅通过接口类名获取所有实现,而ExtensionLoader则通过接口类名和key值获取一个实现;(2)Adaptive实现,就是生成一个代理类,这样就可以根据实际调用时的一些参数动态决定要调用的类了。(3)自动包装实现,这种实现的类一般是自动激活的,常用于包装类,比如Protocol的两个实现类:ProtocolFilterWrapper、ProtocolListenerWrapper。 3、url总线设计 Dubbo为了使得各层解耦,采用了url总线的设计。我们通常的设计会把层与层之间的交互参数做成Model,这样层与层之间沟通成本比较大,扩展起来也比较麻烦。因此,Dubbo把各层之间的通信都采用url的形式。比如,注册中心启动时,参数的url为: registry://0.0.0.0:9090?codec=registry&transporter=netty 这就表示当前是注册中心,绑定到所有ip,端口是9090,解析器类型是registry,使用的底层网络通信框架是netty。 二、Dubbo启动过程Dubbo分为注册中心、服务提供者(provider)、服务消费者(consumer)三个部分。 1、注册中心启动过程 注册中心的启动过程,主要看两个类:RegistrySynchronizer、RegistryReceiver,两个类的初始化方法都是start。 RegistrySynchronizer的start方法:(1)把所有配置信息load到内存;(2)把当前注册中心信息保存到数据库;(3)启动5个定时器。 5个定时器的功能是: (1)AutoRedirectTask,自动重定向定时器。默认1小时运行1次。如果当前注册中心的连接数高于平均值的1.2倍,则将多出来的连接数重定向到其他注册中心上,以达到注册中心集群的连接数均衡。 (2)DirtyCheckTask,脏数据检查定时器。作用是:分别检查缓存provider、数据库provider、缓存consumer、数据库 consumer的数据,清除脏数据;清理不存活的provider和consumer数据;对于缓存中的存在的provider或consumer而数 据库不存在,重新注册和订阅。 (3)ChangedClearTask,changes变更表的定时清理任务。作用是读取changes表,清除过期数据。 (4)AlivedCheckTask,注册中心存活状态定时检查,会定时更新registries表的expire字段,用以判断注册中心的存活状态。如果有新的注册中心,发送同步消息,将当前所有注册中心的地址通知到所有客户端。 (5)ChangedCheckTask,变更检查定时器。检查changes表的变更,检查类型包括:参数覆盖变更、路由变更、服务消费者变更、权重变更、负载均衡变更。
E. java bbo配置文件中的$是哪个目录
是抄找不到schema文件,解决方法如下袭:1、下载一个bbo.xsd文件;2、在windows->preferrence->xml->xmlcatalogadd->catalog entry ->file system 选择刚刚下载的文件路径;3、修改key值和配置文件的http://code.alibabatech.com/schema/bbo/bbo.xsd 相同保存。4、在xml文件右键validate就可以k解决了。
F. bbo客户端和引用的服务端要配置在一个dobbu.xml文件中吗
直连加不发布服务DUBBO的配置属性里面对消费端提供了不从注册中心发现服务的机制,直接配置远程接口的地址,这样可以保证消费端连接到制定的环境接口。这样消费端是解决了问题,但是服务提供端呢?如上图的B1它即是消费端也是服务提供端,它提供A1所依赖的接口,那么如果B1将它的服务发布到注册中心里面(这里需要提醒,STABLE环境机制里面所有子环境公用一个注册中心),那么势必会导致stable环境里面的A会发现B1提供的服务?势必会导致stable环境的不稳定(stable环境的机制是stable环境只能进不能出,就是不能调用外部其他子环境的服务)?所以B1不能发布服务到注册中心,bbo也提供了相关的配置属性来支持这一点。下面我例举出通过哪些配置可以实现这种方案:服务消费端:DUBBO在消费端提供了一个url的属性来指定某个服务端的地址默认的方式是从注册中心发现接口为com.alibaba.bbo.demo.HelloWorldService的服务,但是如果需要直连,可以在bbo.properties下面配置bbo.reference.helloWorldService.url=bbo://ip:port/com.alibaba.bbo.demo.HelloWorldService可以通过配置bbo.reference.url=bbo://ip:port/来让某个消费者系统的服务都指向制定的服务器地址(关于配置信息可以参考《DUBBO配置规则详解》)
G. java bbo配置文件中的“$”是哪个目录
是找不到来schema文件,解决方法如自下:
1、下载一个bbo.xsd文件;
2、在windows->preferrence->xml->xmlcatalogadd->catalog entry ->file system 选择刚刚下载的文件路径;
3、修改key值和配置文件的http://code.alibabatech.com/schema/bbo/bbo.xsd 相同保存。
4、在xml文件右键validate就可以k解决了。
H. 怎么设置bbo的xml配置让maven加载进去
现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记。先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的bbo注册。框架:springmvc+spring+zookeeper+bbo项目分三层,model存放数据,view页面展示、controller下面具体逻辑实现。通过bbo消费方和供应方注册,供应方给消费方暴露接口,供消费方调用。 工程部署需要配置文件有: applicationContext-bbo.xml {– <– 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 –> <– 使用zookeeper注册中心暴露服务地址 –> <– 生成远程服务代理,可以像使用本地bean一样使用demoService –> <bbo:reference id="demoService" interface="com.unj.bbotest.provider.DemoService" /> –} bbo.properties {– <–基于ZooKeeper的Dubbo注册中心直接部署tomcat,修改WEB-INF下文件–> bbo.registry.address=zookeeper://127.0.0.1:2181 bbo.admin.root.password=root bbo.admin.guest.password=guest –} zoo_sample.cfg {– zookeeper/conf/下,修改zoo_sample.cfg为zoo.cfg,启动bin/下zkServer.cmd –}因为引入bbo,摒弃了原有Web Service项目的wdls暴露,由于项目依赖关系严重,项目使用maven构建,通过Maven pom.xml三维坐标引入jar包,调用bbo暴露接口开发。性能测试工具:LoadRunner、jmeter接口测试工具:LoadRunner、jmeter、soapUI、Spotlight安全测试工具:NStalker-Web、AppScan、TamperIESetup自动化工具 :BadboyInstaller、QTP /** * @author wonter * <b>描述:</b> 一天学一个模式 更新中,请关注我的博客!<br> * <b>博客:</b> http://www.cnblogs.com/javame <br> * <b>邮件:</b> [email protected] <br>
I. springmvc+bbo配置问题
换个javassist包,比如javassist-3.18.2-GA.jar,一定是某些版本的包中少了相关的类导致类加载失败
J. 调用bbo服务时事务配置在哪
bbo实现了分布式远程调用框架,多运行节点既能提高可靠性,又能提升负载能力。bbo配置主要有注册中心(推荐zookeeper或redis)、提供者provider、消费者consumer,注册中心是第三方实现,所以主要配置好服务提供者和消费者就可以了。实际上服务接口和实现都是需要我们自己设计和实现的,bbo做的事情就是将服务实现发布到注册中心,然后消费者从注册中心订阅服务接口,之后对接口的调用就由bbo调度提供者去执行并返回结果。以下配置都有源码,见右侧“免费资源”。提供者provider的配置:提供者是独立运行的节点,可以多实例运行,将服务注册到注册中心必须要有application name,注册中心配置zookeeper,协议bbo,超时6秒失败不重试,提供者加载repository和service层bean,然后发布接口service。<bbo:application name="ite-provider" /><bbo:registry address="zookeeper://127.0.0.1:2181"/><bbo:protocol name="bbo" port="20880" /><bbo:provider timeout="6000" retries="0"/><import resource="classpath:cache.xml"/><import resource="classpath:ite-repository.xml"/><import resource="classpath:ite-service.xml"/><import resource="classpath:ite-provider.xml"/>ite-provider.xml,ref引用的bean是ite-service.xml已经定义好的接口实现,bbo:service就是把接口实现发布到注册中心<bbo:service ref="codeListService" interface="com.itecheast.ite.domain.service.CodeListService" /><bbo:service ref="idService" interface="com.itecheast.ite.domain.service.IdService" /><bbo:service ref="passwordService" interface="com.itecheast.ite.domain.service.PasswordService" /><bbo:service ref="rolePermissionService" interface="com.itecheast.ite.domain.service.RolePermissionService" />provider是可以独立运行的,bbo.jar里面有assembly目录,运行mvn assembly:directory就可以生成能直接运行的provider目录assembly.xml内容,可以切换dir或tar.gz两种格式<assembly> <id>assembly</id> <formats> <!– <format>tar.gz</format> –> <format>dir</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <directory>src/main/assembly/bin</directory> <outputDirectory>bin</outputDirectory> <fileMode>0755</fileMode> </fileSet> <fileSet> <directory>src/main/assembly/conf</directory> <outputDirectory>conf</outputDirectory> <fileMode>0644</fileMode> </fileSet> <fileSet> <directory>src/test/resources</directory> <outputDirectory>conf</outputDirectory> <fileMode>0644</fileMode> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>lib</outputDirectory> </dependencySet> </dependencySets></assembly>bbo.properties,运行start.bat或start.sh时,将从属性文件读取bbo配置信息,provider节点可以多处复制并运行。bbo.container=log4j,springbbo.application.name=ite-providerbbo.registry.address=zookeeper://127.0.0.1:2181bbo.monitor.protocol=registrybbo.protocol.name=bbobbo.protocol.port=20880bbo.spring.config=provider.xmlbbo.log4j.file=logs/ite-provider.logbbo.log4j.level=WARN消费者consumer的配置,使用bbo:reference订阅注册中心里的服务即可,然后就可以@Autowired注入服务接口了。<bbo:application name="ite-consumer" /><bbo:registry address="zookeeper://127.0.0.1:2181"/><bbo:reference id="codeListService" interface="com.itecheast.ite.domain.service.CodeListService" /><bbo:reference id="idService" interface="com.itecheast.ite.domain.service.IdService" /><bbo:reference id="passwordService" interface="com.itecheast.ite.domain.service.PasswordService" /><bbo:reference id="rolePermissionService" interface="com.itecheast.ite.domain.service.RolePermissionService" />如果前端项目是一个消费者,就可以在web.xml里直接加载consumer.xml订阅服务了。<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:consumer.xml,classpath:cache.xml,classpath:shiro.xml,classpath:front.xml</param-value></context-param>实际上本地调试开发时,可以不必启用分布式配置,只需要更改web.xml即可,所有的服务都已经是配置好了的。<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:ite-repository.xml,classpath:ite-service.xml,classpath:cache.xml,classpath:shiro.xml,classpath:front.xml</param-value></context-param>zookeeper的配置很简单,wget http://tool.xlongwei.com/softwares/zookeeper-3.4.6.tar.gztar -zxvf zookeeper-3.4.6.tar.gzcd zookeeper-3.4.6/confcp zoo_sample.cfg zoo.cfgvi zoo.cfg #配置zookeeper参数单机配置(集群配置待研究)tickTime=2000initLimit=10syncLimit=5dataDir=/home/bbo/zookeeper-3.3.3/dataclientPort=2181运行或停止zookeepersh zkServer.sh start | stop