阿里dubbo工程的搭建

来源:互联网 发布:海珠区淘宝美工培训 编辑:程序博客网 时间:2024/05/17 17:58

由于对spring不是很熟悉,在搭建dubbo时折腾了一段时间。故在此将搭建过程分享一下,互相学习。

一下主要是在搭建过程中遇到的问题。

首先构建provider的maven工程。在pom.xml中,添加以下内容

1.dependencies

<dependency><!-- spring依赖包 --><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.5.RELEASE</version></dependency><dependency><!-- 阿里的dubbo的依赖包 --><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.4.9</version></dependency><dependency><!-- zookeeper依赖包 --><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.3.3</version><exclusions><exclusion><groupId>com.sun.jmx</groupId><artifactId>jmxri</artifactId></exclusion><exclusion><groupId>com.sun.jdmk</groupId><artifactId>jmxtools</artifactId></exclusion><exclusion><groupId>javax.jms</groupId><artifactId>jms</artifactId></exclusion></exclusions></dependency><dependency><!-- zookeeper客户端调用的包 --><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><dependency><groupId>com.netflix.curator</groupId><artifactId>curator-framework</artifactId><version>1.1.16</version></dependency>

2.maven打包的内容

<build><!-- maven打包 --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><configuration><archive><manifest><addClasspath>true</addClasspath><mainClass>zju.cs.lzm.main.Main</mainClass><!-- 外接调用主类的路径 --><classpathPrefix>lib/</classpathPrefix></manifest></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.5.1</version><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib/</outputDirectory></configuration></execution></executions></plugin></plugins></build>



将pom.xml构建完毕后,需要在工程的resources目录下创建provider.xml文件,作为spring的配置文件。

具体内容在其他的很多教程页面里都有,这里不再赘述。下面是几个注意事项:

1.在provider.xml文件中,会出现阿里的schema无法获得的错误。如:

Multiple annotations found at this line:- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'.- schema_reference.4: Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd', because 1)  could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
这时,可以在Eclipse中,打开window->preferences->validation,将其中的与XML相关的项设置为未选中。


2.在进行打包提交时,最好使用maven进行打包,上面已经提供了maven打包的代码内容。然后将lib目录也要拷贝到和执行的jar相同的目录下。如果使用fatjar进行打包的话,可能会出现xml不匹配的异常。


3.如果在这个过程中,工程内部是没有错误显示的,但是工程名称上却又红叉,可以在下面的problems栏中,右击每个error,进行quick fix。


4.provider和consumer使用了同一个接口。注意,不仅要这个接口的名称和内容相同,接口的路径也要相同。因为在provider.xml和consumer.xml中,要进行接口暴露的,首先他们俩直接要配对上;同时路径还要符合自己的目录,以允许spring进行依赖注入。


5。两者的application name不要相同,他们均可以在dubbo服务器端的监控中心进行查看。


6.在provider端,若需要调用本地已经实例化了的一个单例对象,则可以这样做

首先,在xml中配置这个单例bean

<!-- 对于singleton模式,则加载spring配置文件的时候就进行了bean的初始化。而对于prototype模式,则是在进行getBean()方法时才进行实例化 --><bean id="IPTransformer" class="zju.cs.lzm.avltree.IPTransformer" scope="singleton"/>
然后,
在共同接口的实现类里,创建一个属性,如

private IPTransformer ipt = null;public IPTransformer getIpt() {return ipt;}public void setIpt(IPTransformer ipt) {this.ipt = ipt;}

需要同时设置getset方法。

然后,在xml中进行配置

<!-- 和本地bean一样实现服务。使用实现类,但是id是接口的名称 --><bean id="IPLibrary" class="zju.cs.lzm.main.IPLibraryImpl" ><property name="ipt" ref="IPTransformer"></property><!-- 为这个类依赖注入一个IPTransformer类型的名称为ipt的对象 --></bean>

则,这样会在spring对象创建的时候,自动创建IPTransformer的一个单例对象,然后将这个单例对象以ipt为名称被注入到类IPLibrary中。就可以在IPLibrary中进行调用了。

0 0
原创粉丝点击