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

我们之前讲解了基于配置以及基于注解的服务提供者和服务消费者的开发模式,这里为大家介绍一个不常用的开发模式,这种模式不是基于注解,而是基于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{

	@Override
	public 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一样使用Service
		SortService 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值