概述
本文使用Dubbo提供的ServiceConfig、ReferenceConfig配置类演示怎样提供服务、消费服务、注册服务、调用服务等
一、接口及公共类
1. GreetingService
public interface GreetingService {
String sayHello(String name);
Result<String> testGeneric(PoJo poJo);
}
2. GreetingService
public class PoJo {
private String id;
private String name;
}
3. Result
public class Result<T> implements Serializable {
private static final long serialVersionUID = 1L;
private boolean sucess;
private String msg;
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public boolean isSucess() {
return sucess;
}
public void setSucess(boolean sucess) {
this.sucess = sucess;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
二、服务提供者
1. GreetingServiceImpl
public class GreetingServiceImpl implements GreetingService {
@Override
public String sayHello(String name) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "Hello " + name + " " + RpcContext.getContext().getAttachment("company");
}
@Override
public Result<String> testGeneric(PoJo poJo) {
Result<String> result = new Result<>();
result.setSucess(true);
try {
result.setData(JSON.json(poJo));
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
2. ApiProvider
public class ApiProvider {
public static void main(String[] args) throws IOException {
// 1.创建ServiceConfig实例
ServiceConfig<GreetingService> serviceConfig = new ServiceConfig<GreetingService>();
// 2.设置应用程序配置
serviceConfig.setApplication(new ApplicationConfig("dubbo-provider"));
// 3.设置服务注册中心信息
RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181");
serviceConfig.setRegistry(registryConfig);
// 4.设置接口与实现类
serviceConfig.setInterface(GreetingService.class);
serviceConfig.setRef(new GreetingServiceImpl());
// 5.设置服务分组与版本
// 在Dubbo中,"服务接口+服务分组+服务版本"唯一地确定一个服务,同一个服务接口可以有不同的版本以便服务升级等,
// 另外每个服务接口可以属于不同分组,所以当调用方消费服务时一定要设置正确的分组与版本
serviceConfig.setVersion("1.0.0");
serviceConfig.setGroup("dubbo");
// 6.设置线程池策略
//HashMap<String, String> parameters = new HashMap<>();
//parameters.put("threadpool", "mythreadpool");
//serviceConfig.setParameters(parameters);
// 7.导出服务
serviceConfig.export();
// 8.挂起线程,避免服务停止
System.out.println("server is started");
System.in.read();
}
}
三、服务消费者
1. ApiConsumer
public class ApiConsumer {
public static void main(String[] args) throws InterruptedException {
// 1.创建服务引用对象实例
ReferenceConfig<GreetingService> referenceConfig = new ReferenceConfig<GreetingService>();
// 2.设置应用程序信息
referenceConfig.setApplication(new ApplicationConfig("first-dubbo-consumer"));
// 3.设置服务注册中心
referenceConfig.setRegistry(new RegistryConfig("zookeeper://127.0.0.1:2181"));
//直连测试
//referenceConfig.setUrl("dubbo://192.168.0.109:20880");
// 4.设置服务接口和超时时间
referenceConfig.setInterface(GreetingService.class);
referenceConfig.setTimeout(5000);
// 5.设置自定义负载均衡策略与集群容错策略
referenceConfig.setLoadbalance("myroundrobin");
referenceConfig.setCluster("myCluster");
RpcContext.getContext().set("ip", "30.10.67.231");
// 6.设置服务分组与版本
referenceConfig.setVersion("1.0.0");
referenceConfig.setGroup("dubbo");
// 7.引用服务
GreetingService greetingService = referenceConfig.get();
// 8. 设置隐式参数
// 设置隐式参数,然后服务提供者就可以在服务实现类方法里获取参数值
RpcContext.getContext().setAttachment("company", "alibaba");
// 9. 调用服务
// 同步发起远程调用,然后当前线程会被阻塞直到服务提供方把结果返回
System.out.println(greetingService.sayHello("world"));
Thread.currentThread().join();
}
本文通过示例介绍如何使用Dubbo的ServiceConfig和ReferenceConfig进行服务提供与消费。包括接口定义、服务实现、服务注册及服务调用等关键步骤。
4206

被折叠的 条评论
为什么被折叠?



