Dubbo学习笔记(三) Provider和Consumer
Provider
这里我们使用spring-boot来作为框架,搭建dubbo服务。
新建maven工程,在pom中加入
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.skyon</groupId> <artifactId>dubboProducer</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <jedis.version>2.0.0</jedis.version> <mainClass>SpringApplicationC</mainClass> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <exclusions> <!-- 排除依赖,否则启动会报错 --> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> <version>2.5.3</version> </dependency> <!-- 这里是为了增加对zookeeper的注册和订阅 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <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> <version>3.4.5</version> </dependency> <!-- 必须作为实现 --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- redis配置的时候需要使用 --> <!--<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.4.2</version> </dependency>--> <!-- 需要web容器 <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.7</version> </dependency>--> </dependencies> <build> <plugins> <plugin> <!-- 这是spring boot的一个plugin,可以直接生成可运行的jar包 --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.2.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>${mainClass}</mainClass> <!-- 避免直接覆盖maven package生成的jar包 --> <classifier>exec</classifier> </configuration> </execution> </executions> </plugin> <plugin> <artifactId>maven-failsafe-plugin</artifactId> <executions> <execution> <goals> <goal>integration-test</goal> <goal>verify</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
在src/main/resources下面新建dubbo提供方服务的provider.xml
<?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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubboProducer" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry id="multicastRegistry" address="multicast://224.5.6.7:1234" /> <dubbo:registry id="zookeeperRegistry" address="zookeeper://192.168.23.128:2181" client="zkclient"/> <dubbo:registry id="redisRegistry" address="redis://192.168.23.128:6379" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:protocol id="rmi1" name="rmi" port="1099" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.skyon.pms.service.ActivityService" ref="activityService" registry="multicastRegistry, zookeeperRegistry, redisRegistry" protocol="dubbo, rmi1" /> <!-- 和本地bean一样实现服务 --> <bean id="activityService" class="com.skyon.pms.serviceImpl.ActivityServiceImpl" /> </beans>
- 到这里,其他dubbo已经配置完成了,其他就是正常的service和实现,以及spring boot启动应用即可。
Consumer
- 首先将provider提供service的service接口和涉及的对象拷贝给Consume工程。
- 修改POM文件, 基本服务提供者一致
然后在src/main/resources下新建Provider类,然后就可以通过各种注册中心和协议获得对应接口的代理,然后就可以调用然后返回值。
<?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: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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="dubboConsumer" /> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry id="multicastRegistry" address="multicast://224.5.6.7:1234" /> <dubbo:registry id="zookeeperRegistry" address="zookeeper://192.168.23.128:2181" client="zkclient"/> <dubbo:registry id="redisRegistry" address="redis://192.168.23.128:6379" /> <!--<dubbo:registry address="" /> <dubbo--> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <!--<dubbo:reference id="activityService" interface="com.skyon.pms.service.ActivityService" registry="multicastRegistry"/> --> <dubbo:reference id="activityService1" interface="com.skyon.pms.service.ActivityService" registry="zookeeperRegistry" protocol="dubbo"/> <dubbo:reference id="activityService2" interface="com.skyon.pms.service.ActivityService" registry="redisRegistry" protocol="rmi"/> </beans>
具体工程在: dubbo_exmaple