SpringBoot實現dubbo的本地存根(Stub)

SpringBoot實現dubbo的本地存根(Stub)

遠程服務後,客戶端通常只剩下接口,而實現全在服務器端,但提供方有些時候想在客戶端也執行部分邏輯,比如:做 ThreadLocal 緩存,提前驗證參數,調用失敗後偽造容錯數據等等,此時就需要在 API 中帶上 Stub,客戶端生成 Proxy 實例,會把 Proxy 通過構造函數傳給 Stub,然後把 Stub 暴露給用戶,Stub 可以決定要不要去調 Proxy。

1. 定義一個服務接口和服務實現類

public interface UserInterface {
public User getUserById(Integer id) ;
}

@Service(version = "1.0.0", stub = "com.jikeh.stub.UserServiceStub")
public class UserService implements UserInterface {
public User getUserById(Integer id) {
User user = new User() ;
user.setId(id);
user.setName("hu");
return user;
}
}

2.服務消費者的Stub類

public class UserServiceStub implements UserInterface {

//必須定義這個接口,以便接收dubbo在調用遠程服務生成的服務代理類
private UserInterface userLocalService ;

//這個構造函數必須要提供,dubbo框架會在消費者這一方調用這個方法
public UserServiceStub(UserInterface userLocalService ) {
this.userLocalService = userLocalService ;
}
public User getUserById(Integer id) {
User user = null ;
try {
user = userLocalService.getUserById(id) ;
}catch(Exception e) {
//降級
user = new User();
user.setName("異常用戶");
 }
return user ;
}
}

3.測試代碼


@Reference(version = "1.0.0")
private UserServiceStub userService;

public static void main(String[] args) {
User user = userService.getUserById(1) ;
System.out.println(user.getName());
}


分享到:


相關文章: