【Dubbo分布式服务框架】4.基于API配置的服务提供者和消费者

来源:互联网 发布:香港广华街枪店淘宝 编辑:程序博客网 时间:2024/05/29 15:12
我们之前讲解了基于配置以及基于注解的服务提供者和服务消费者的开发模式,这里为大家介绍一个不常用的开发模式,这种模式不是基于注解,而是基于API的模式。
一般我们开发都是基于配置或注解的,而API的模式适用于OpenAPI, ESB, Test, Mock等系统集成,所以大家了解即可。

首先我们在MyEclipse里创建一个名为Dubbo-Web-Provider-API的服务提供者:

我们在创建的工程中加入依赖的jar包,这里我们和之前加入的一样,只是去掉了Spring的依赖,因为这个不是基于配置的,是直接在类中硬编码,所以不依赖配置,无需Spring。


然后我们编写相关的Service以及Service实现,这里和之前一样,我们是一个排序的服务:

接口:
package cn.com.dubbo.service;public interface SortService {//升序排序int[] ascendingSort(int[] arrays);}

实现:
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;}}

然后我们的重头戏,执行类中,我们要进行一下几步:
(1)创建当前应用配置ApplicationConfig
此处相当于xml配置的Spring配置文件<beans></beans>
(2)连接注册中心配置RegistryConfig
此处相当于xml配置的注册中心配置
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
(3)服务提供者协议配置ProtocolConfig
此处相当于xml配置的应用方提供信息:
<dubbo:application name="annotation-arrays-sort-app"  />
(4)服务提供者暴露服务配置ServiceConfig<xxxService>
此处相当于xml配置的Bean的实现配置:
<bean id="sortService" class="cn.com.dubbo.service.impl.SortServiceImpl" />
以及整合上面的所有配置。
(5)暴露服务
此处相当于xml配置的Service服务暴露配置
<dubbo:service interface="cn.com.dubbo.service.SortService" ref="sortService" />
这里我们服务提供者的具体实现代码为:
package cn.com.dubbo.run;import java.io.IOException;import cn.com.dubbo.service.SortService;import cn.com.dubbo.service.impl.SortServiceImpl;import com.alibaba.dubbo.config.ApplicationConfig;import com.alibaba.dubbo.config.ProtocolConfig;import com.alibaba.dubbo.config.RegistryConfig;import com.alibaba.dubbo.config.ServiceConfig;public class Provider {public static void main(String[] args) throws IOException {//服务实现SortService sortService = new SortServiceImpl();//当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("SortServiceConfig");//连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("zookeeper://127.0.0.1:2181");//注册中心地址//服务提供者协议配置ProtocolConfig protocol = new ProtocolConfig();protocol.setName("dubbo");protocol.setPort(20880);protocol.setThreads(200);//注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口//服务提供者暴露服务配置ServiceConfig<SortService> service = new ServiceConfig<SortService>();service.setApplication(application);service.setRegistry(registry);service.setProtocol(protocol);service.setInterface(SortService.class);service.setRef(sortService);service.setVersion("1.0.0");//暴露及注册服务service.export();System.out.println("服务已暴露!");System.in.read(); // 按任意键退出}}

然后是我们的消费者,工程名为Dubbo-Web-Consumer-API,依赖jar和之前一样,然后创建一个Service的接口,用于引用即可:

然后我们在消费者的主程序Consumer中编写以下代码:
package cn.com.dubbo.run;import java.io.IOException;import cn.com.dubbo.service.SortService;import com.alibaba.dubbo.config.ApplicationConfig;import com.alibaba.dubbo.config.ReferenceConfig;import com.alibaba.dubbo.config.RegistryConfig;public class Consumer {public static void main(String[] args) throws IOException {//当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("sortServiceUser");//连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("zookeeper://127.0.0.1:2181");//注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接 //引用远程服务ReferenceConfig<SortService> reference = new ReferenceConfig<SortService>();reference.setApplication(application);reference.setRegistry(registry);reference.setInterface(SortService.class);reference.setVersion("1.0.0");//和本地Bean一样使用ServiceSortService sortService = reference.get(); // 获取远程服务代理        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]);}}}

在消费者中只需要做一下四步:
(1)创建当前应用配置ApplicationConfig
此处相当于xml配置的Spring配置文件<beans></beans>
(2)连接注册中心配置RegistryConfig
此处相当于xml配置的注册中心配置
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
(3)引用远程服务ReferenceConfig
此处相当于xml配置的引入暴露的服务:
<dubbo:reference id="sortService" interface="cn.com.dubbo.service.SortService" />
(4)使用Service
这里就可以和本地Bean一样使用Service对象了。

然后我们运行Zookeeper:

接下来执行服务方主程序:

然后执行消费方主程序:

可以看到,我们的消费方成功使用了SortService提供的排序服务。

我们的基于API的服务方和消费方就介绍到这里,主要让大家理解整个服务的暴露与引入的流程,开发模式我们了解即可。
转载请注明出处:http://blog.csdn.net/acmman/article/details/73864029
阅读全文
0 0
原创粉丝点击