【Dubbo分布式服务框架】3.基于注解的服务提供者和消费者

来源:互联网 发布:软件设计师教程 编辑:程序博客网 时间:2024/05/29 14:31
我们前面使用xml配置了服务的提供方和消费方,其实Dubbo还提供了基于注解的配置。

我们下面把之前的服务改造成注解的方式。

分别创建服务提供者和服务消费者:

消费者:



添加的依赖和之前一样:


对于服务提供方:
Service接口:
package cn.com.dubbo.service;public interface SortService {//升序排序int[] ascendingSort(int[] arrays);}

Service实现中,添加Service暴露注解:
package cn.com.dubbo.service.impl;import cn.com.dubbo.service.SortService;import com.alibaba.dubbo.config.annotation.Service;@Service(version="1.0.0")public class SortServiceImpl implements SortService{@Overridepublic int[] ascendingSort(int[] arrays) {int temp=0;//冒泡升序排序for (int i = 0; i < arrays.length-1; i++) {for (int j = i+1; j < arrays.length; j++) {if(arrays[i]>arrays[j]){temp=arrays[i];arrays[i]=arrays[j];arrays[j]=temp;}}}return arrays;}}

服务提供执行类Provider:
package cn.com.dubbo.run;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Provider {public static void main(String[] args) throws IOException { ClassPathXmlApplicationContext context =  new ClassPathXmlApplicationContext(new String[] {"provider.xml"}); //远程provider调用 /*ClassPathXmlApplicationContext context =  new ClassPathXmlApplicationContext(new String[] {"http://192.168.1.102/wiki/display/dubbo/provider.xml"});*/     context.start();     System.in.read(); // 按任意键退出}}

配置文件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:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://code.alibabatech.com/schema/dubbo           http://code.alibabatech.com/schema/dubbo/dubbo.xsd           http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd           http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/tx            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">               <!-- 提供方应用信息,也可以用dubbo.properties配置 -->    <dubbo:application name="annotation-arrays-sort-app"  />     <!-- 使用zookeeper注册中心暴露服务地址 -->      <dubbo:registry address="zookeeper://127.0.0.1:2181" />        <!-- 用dubbo协议在20880端口暴露服务 -->    <dubbo:protocol name="dubbo" port="20880" /> <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --><dubbo:annotation package="cn.com.dubbo.service" /></beans>

对于服务消费方:
Service接口与服务提供方一样。

编写一个SortAction:
package cn.com.dubbo.action;import org.springframework.stereotype.Component;import cn.com.dubbo.service.SortService;import com.alibaba.dubbo.config.annotation.Reference;@Component //与xml生命bean一样public class SortAction {    @Reference(version="1.0.0") // 获取远程服务代理    private SortService sortService;        public void sort(){    int [] arrays = {234,1,45,22,123};        System.out.println("排序前:");        for (int i = 0; i < arrays.length; i++) {System.out.println("arrays["+i+"]="+arrays[i]);}        arrays = sortService.ascendingSort(arrays); // 执行远程方法         //显示调用结果        System.out.println("排序后:");        for (int i = 0; i < arrays.length; i++) {System.out.println("arrays["+i+"]="+arrays[i]);}    }}

服务执行类Consumer:
package cn.com.dubbo.run;import java.io.IOException;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Component;import com.alibaba.dubbo.config.annotation.Reference;import cn.com.dubbo.action.SortAction;import cn.com.dubbo.service.SortService;public class Consumer {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext(new String[] {"consumer.xml"});//远程consumer调用/*ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext(new String[] {"http://192.168.1.102/wiki/display/dubbo/consumer.xml"});*/        context.start();        SortAction sortAction=(SortAction)context.getBean("sortAction");        sortAction.sort();}}

配置文件consumer.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:context="http://www.springframework.org/schema/context"       xmlns:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"       xsi:schemaLocation="http://code.alibabatech.com/schema/dubbo           http://code.alibabatech.com/schema/dubbo/dubbo.xsd           http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd           http://www.springframework.org/schema/aop           http://www.springframework.org/schema/aop/spring-aop-2.5.xsd           http://www.springframework.org/schema/tx            http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">              <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->    <dubbo:application name="annotation-consumer-of-arraysSort-app"  />     <!-- 使用zookeeper注册中心暴露发现服务地址 -->      <dubbo:registry address="zookeeper://127.0.0.1:2181" />    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --><dubbo:annotation package="cn.com.dubbo.service" /></beans>

然后我们启动Zookeeper:


运行服务提供端Provider类:


然后运行消费方Consumer类:


可以看到,我们的注解也实现了服务的暴露、注册与获取。
转载请注明出处:http://blog.csdn.net/acmman/article/details/73554728
阅读全文
0 0
原创粉丝点击