概述
本文使用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(); }