dubbo简单集成spring

来源:互联网 发布:三大男高音 知乎 编辑:程序博客网 时间:2024/05/17 06:12

使用maven构建 core-inteface(接口定义),core(服务提供实现),comsumer(服务消费)

1 ,建立core- interface公共api



2 建立服务提供者项目,core  实现interface中接口



pom.xml中引入dubbo ,和  core-interface  使用zookeeper,还需要引入zk的jar

<dependency>    <groupId>org.apache.zookeeper</groupId>    <artifactId>zookeeper</artifactId>    <version>3.4.9</version></dependency>    <dependency>            <groupId>com.alibaba</groupId>            <artifactId>dubbo</artifactId>            <version>2.5.3</version>        </dependency> <dependency>    <groupId>com.cn.web</groupId>    <artifactId>core-interface</artifactId>    <version>0.0.1-SNAPSHOT</version>    </dependency>



dubbo-provider.xml 配置 ,( 相关更详细参数配置说明 http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%3Cdubbo%3Aservice%2F%3E

<beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.springframework.org/schema/context"    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"    xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans.xsd     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd             http://code.alibabatech.com/schema/dubbo              http://code.alibabatech.com/schema/dubbo/dubbo.xsd">        <!-- 使用Annotation自动注册Bean,解决事物失效问题:在主容器中不扫描@Controller注解,在SpringMvc中只扫描@Controller注解。  --><!-- <context:component-scan base-package="com.cn.core">base-package 如果多个,用“,”分隔<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan> -->            <!--  当前应用信息配置  -->    <dubbo:application name="dubbo-core-service" />        <!-- 使用multicast广播注册中心暴露服务地址 -->    <!-- <dubbo:registry address="multicast://224.1.1.1:1234" /> -->    <!-- 使用zookeeper注册中心暴露服务地址 -->    <dubbo:registry address="zookeeper://192.168.1.21:2181" />    <!-- 用dubbo协议在20880端口暴露服务   访问日志路径-->    <dubbo:protocol name="dubbo" port="20880" accesslog="D:/bar.log"/>         <!-- 用rmi协议在20881端口暴露服务 -->         <dubbo:protocol name="rmi" port="20881" />         <!-- 声明需要暴露的服务接口 --><!-- 相关更详细参数配置说明  http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%3Cdubbo%3Aservice%2F%3E-->    <dubbo:service interface="com.cn.service.UserService"        ref="userService" protocol="dubbo" delay="-1" timeout="6000" retries="0"/>    <!-- 和本地bean一样实现服务 也可直接在UserServiceImpl上@Service("userService")-->     <!-- <bean id="userService" class="com.cn.core.service.impl.UserServiceImpl" /> --></beans>  

接着启动core,提供服务,启动方式 有基本常见一下三种:

1,服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源。

web.xml中加载 dubbo-provider.xml配置 或者引入到其他applicationContext.xml中,反正能加载到容器即可

<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:/dubbo-provider.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>


 
2,服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。 

package com.cn.core;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CoreLauncher {private static Logger logger =  LoggerFactory.getLogger(CoreLauncher.class);    /**     * @param args     */    public static void main(String[] args) {        logger.info("开始启动asset");// 通过自定义main函数ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo-provider.xml");context.start();synchronized (CoreLauncher.class) {            while (true) {                try {                CoreLauncher.class.wait();                } catch (Throwable e) {                }            }        }    }}
java应用项目可以打包成一个jar,指定一个拥有main函数的CoreLauncher作为你这个jar包的程序入口。

tips:eclipse打成可执行jar方式,制定项目鼠标右键-->exoport-->java-->Runable JAR file-->launcher configuration选择项目中的包含main函数的CoreLauncher类,选择export destination路径并设置名字core.jar ,library handling可选择是否包含其他依赖包,这里测试用,所以选择包含其他依赖包,package required lib.........-->Finish

执行jar 命令, Java -jar core.jar运行。


3,服务容器的加载内容可以扩展,内置了spring, jetty, log4j等加载,可通过Container扩展点进行扩展

在classpath目录下配置 dubbo.properties 相关配置

dubbo.container=log4j,spring  dubbo.application.name=ore-service  dubbo.application.owner=core_sdubbo.registry.address=zookeeper://127.0.0.1:2181  dubbo.protocol.name=dubbo  dubbo.protocol.port=56432  dubbo.service.loadbalance=roundrobin  dubbo.spring.config=classpath:dubbo-provider.xml  dubbo.log4j.level=DEBUG  dubbo.log4j.level=INFO  

package com.cn.core;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;public class CoreLauncher {private static Logger logger =  LoggerFactory.getLogger(CoreLauncher.class);    /**     * @param args     */    public static void main(String[] args) {        logger.info("开始启动asset");//第三种  在classpath目录下配置 dubbo.properties 相关配置com.alibaba.dubbo.container.Main.main(args);    }}

java应用项目可以打包成一个jar,指定一个拥有main函数的CoreLauncher作为你这个jar包的程序入口。



3 建立项目 consumer 消费服务 




同样引入 core-interface和 dubbo ,zk的jar,注意下dubbo的jar

<dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.3</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency>

配置 dubbo-consumer.xml,详细配置说明,参见:http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%3Cdubbo%3Areference%2F%3E

<?xml version="1.0" encoding="UTF-8"?>  <beans xmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns:context="http://www.springframework.org/schema/context"    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"      xsi:schemaLocation="http://www.springframework.org/schema/beans              http://www.springframework.org/schema/beans/spring-beans.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd              http://code.alibabatech.com/schema/dubbo              http://code.alibabatech.com/schema/dubbo/dubbo.xsd">          <!-- 消费方应用名 -->      <dubbo:application name="consumer-app"/>          <!-- 使用multicast广播注册中心暴露发现服务地址 -->     <!--  <dubbo:registry address="multicast://224.1.1.1:1234" />  -->     <dubbo:registry address="zookeeper://192.168.1.21:2181" />          <!-- 生成远程服务代理,可以和本地bean一样使用demoService   check 启动是否检查服务可用 false不检查-->      <dubbo:reference id="userService" interface="com.cn.service.UserService" check="false">    <!-- <dubbo:method name="selectUsers" timeout="3000" retries="2000"></dubbo:method> -->    </dubbo:reference>     </beans>  

启动consumer服务,访问userController中的getTest1测试 













0 0
原创粉丝点击