RestyPass, 고성능 HTTP 호출 클 라 이언 트 라 이브 러 리
고성능 Restful 서 비 스 는 클 라 이언 트 라 이브 러 리 를 호출 하여 Spring MVC 주 해 를 완전히 호 환 합 니 다. 인터페이스 와 주 해 를 바탕 으로 자동 프 록 시 클 라 이언 트 HTTP 요청 을 지원 합 니 다. 서비스 발견, 부하 균형, 자동 퓨즈, 강등, 재 시도, 흐름 제한 을 지원 합 니 다.Feign + Hystrix + Ribbon + ApacheHttpClient 를 덮어 쓰 는 기능
HOME
spring cloud / spring boot 와 조합 하여 사용 할 수 있 고 마이크로 서비스 구조 가 쉽게 정착 할 수 있 도록 도와 주 며 서비스 간 의 마지막 킬로미터 호출 문 제 를 해결 할 수 있 습 니 다.Github 주소:https://github.com/darren-fu/RestyPass 코드 클 라 우 드 주소:https://gitee.com/darren-fu/RestyPass
대비 SpringCloud 기술 창고: Feign + Hystrix + Ribbon + ApacheHttpClient
클 라 이언 트 코드
// @EnableRestyPass RestyPass
@SpringBootApplication
@EnableRestyPass(basePackages = {"com.github.df"})
@RestController
//@EnableDiscoveryClient
public class TestClientApplication {
public static void main(String[] args) {
SpringApplication.run(TestClientApplication.class, args);
}
@Autowired
private ProxyService proxyService;
@RequestMapping(value = "nothing")
public String callNothing() {
proxyService.getNothing();
return "OK";
}
}
클 라 이언 트 서비스
//
//RestyService
@RestyService(serviceName = "server",
fallbackEnabled = true,
fallbackClass = ProxyServiceImpl.class,
forceBreakEnabled = false,
circuitBreakEnabled = false,
loadBalancer = RandomLoadBalancer.NAME,
retry = 1,
requestTimeout = 10000,
limit = 1000 //
)
@RequestMapping(value = "/resty")
public interface ProxyService extends ApplicationService {
// RestyMethod
//
@RestyMethod(retry = 2,
fallbackEnabled = "false",
circuitBreakEnabled = "false",
forceBreakEnabled = "false",
limit = 10)
@RequestMapping(value = "/get_nothing", method = RequestMethod.GET, headers = "Client=RestyProxy", params = "Param1=val1")
void getNothing();
// spring mvc
@RestyMethod()
@RequestMapping(value = "/get_age/{name}", method = RequestMethod.GET)
Response getAge(@RequestParam("id") Long id, @PathVariable(value = "name") String name, @RequestHeader(value="TOKEN") String token);
// : Future> ,
@RestyMethod
@RequestMapping(value = "/get_status", method = RequestMethod.GET)
String getStatus(RestyFuture future);
// : Future>
@RestyMethod
@RequestMapping(value = "/get_user", method = RequestMethod.GET)
Future getUser();
}
서비스 실례 정의
# resty-server.yaml
servers:
- serviceName: server
instances:
- host: localhost
port: 9201
- host: localhost
port: 9202
서버 코드
@RestController
@RequestMapping("/resty")
public class TestController {
@RequestMapping(value = "/get_nothing", method = RequestMethod.GET)
public void nothing() {
System.out.println("############nothing");
}
}
핵심 인터페이스
설정 및 주입
자신의 실현 류 를 주입 하여 특수 한 수 요 를 실현 하 다.
@Configuration
public class RestyPassConfig {
@Bean
public FallbackExecutor fallbackExecutor() {
return new RestyFallbackExecutor();
}
@Bean
public ServerContext serverContext() {
return new ConfigurableServerContext();
}
@SuppressWarnings("SpringJavaAutowiringInspection")
@Bean
public CommandExecutor commandExecutor(RestyCommandContext commandContext) {
return new RestyCommandExecutor(commandContext);
}
@Bean
public CommandFilter CustomCommandFilter() {
return new CustomCommandFilter();
}
private static class CustomCommandFilter implements CommandFilter {
@Override
public int order() {
return 0;
}
@Override
public boolean shouldFilter(RestyCommand restyCommand) {
return true;
}
@Override
public CommandFilterType getFilterType() {
return CommandFilterType.BEFOR_EXECUTE;
}
@Override
public void before(RestyCommand restyCommand) throws FilterException {
System.out.println("custom command filter");
}
@Override
public void after(RestyCommand restyCommand, Object result) {
}
@Override
public void error(RestyCommand restyCommand, RestyException ex) {
}
}
}
도입 jar
com.github.darren-fu
resty-pass
1.3.0
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.