¡Acostúmbrate a escribir juntos! Este es el día 12 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de abril", haga clic para ver los detalles del evento .
Feign
, En el marco de microservicios, la invocación directa del servicio se vuelve muy concisa y simple, y no hay necesidad de 编写Java Http
llamar a la interfaz de otros microservicios.
simulación dinámica
Para llamadas fingir, nuestro uso general es 微服务
crear una feignclient
interfaz correspondiente para cada uno y luego controller
escribir el método correspondiente para cada interfaz de microservicio uno por uno para llamar a la interfaz de microservicio correspondiente.
Por ejemplo lo siguiente:
//system
@FeignClient(name = "system")
public interface SystemClient {
@GetMapping("/system/test1")
JsonResult test1(String test1);
@GetMapping("/system/test2")
JsonResult test2(String test2);
....
}
//user
@FeignClient(name = "user")
public interface UserClient {
@GetMapping("/user/test1")
JsonResult test1(String test1);
@GetMapping("/user/test2")
JsonResult test2(String test2);
....
}
复制代码
Si está escrito de esta manera, puede haber algunos 累赘
, entonces podemos crear uno 动态的feign
; al llamar sytem微服务
, pasar uno feignclient
para name
entrar system
, y luego definir uno 通用的方法
, especificar el llamado, url
y pasarlo 参数
, ¿y eso es todo?
¡La respuesta es sí! ! ! ^_^
- Definir una interfaz genérica, get genérico, métodos de publicación
public interface DynamicService {
@PostMapping("{url}")
Object executePostApi(@PathVariable("url") String url, @RequestBody Object params);
@GetMapping("{url}")
Object executeGetApi(@PathVariable("url") String url, @SpringQueryMap Object params);
}
复制代码
ejecutarPostApi: (método de publicación)
url
, indicando que desea llamar a la url de la interfaz del microservicio, en general,controller
la url de la interfaz correspondiente;
params
, los parámetros pasados para llamar a la interfaz se agregan aquí@RequestBody
, y lacontroller
interfaz correspondiente, los parámetros de recepción también deben agregar esta anotación.
- definir una dinámica
feignclient
@Component
public class DynamicClient {
@Autowired
private DynamicFeignClientFactory<DynamicService> dynamicFeignClientFactory;
public Object executePostApi(String feignName, String url, Object params) {
DynamicService dynamicService = dynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);
return dynamicService.executePostApi(url, params);
}
public Object executeGetApi(String feignName, String url, Object params) {
DynamicService dynamicService = dynamicFeignClientFactory.getFeignClient(DynamicService.class, feignName);
return dynamicService.executeGetApi(url, params);
}
}
复制代码
ejecutarPostApi: (método de publicación)
fingeName, que indica el nombre del microservicio a llamar, generalmente corresponde a
application.name
, por ejemplo:system
url
, indicando que desea llamar a la url de la interfaz del microservicio, en general,controller
la url de la interfaz correspondiente;
params
, los parámetros pasados para llamar a la interfaz se agregan aquí@RequestBody
, y lacontroller
interfaz correspondiente, los parámetros de recepción también deben agregar esta anotación.
- Definir una
feignclient
clase de fábrica dinámica
@Component
public class DynamicFeignClientFactory<T> {
private FeignClientBuilder feignClientBuilder;
public DynamicFeignClientFactory(ApplicationContext appContext) {
this.feignClientBuilder = new FeignClientBuilder(appContext);
}
public T getFeignClient(final Class<T> type, String serviceId) {
return this.feignClientBuilder.forType(type, serviceId).build();
}
}
复制代码
La función principal: es ayudarnos a crear dinámicamente un
feignclient
objeto
Bueno, específicamente 操作步骤
, ¡eso es lo que dije arriba! ! ! ¿Es demasiado 通用
? ^_^
Universal es universal, entonces, ¿cómo jugar ( 如何使用
)?
La forma de usarlo también es muy sencilla: ^_^
DynamicClient dynamicClient = SpringUtil.getBean(DynamicClient.class);
Object result = dynamicClient.executePostApi("system", "/system/test", new HashMap<>());
System.out.println("==========>"+JSONObject.toJSONString(result));
复制代码
Obtenga el
DynamicClient
objeto primero, luego llame alexecutePostApi
método directamente"sistema", que indica el nombre del microservicio que llama, que generalmente corresponde a
application.name
"/sistema/prueba", lo que significa que el llamado
url
new HashMap<>(), el parámetro que debe pasarse
Bueno, esto ha implementado una versión general feignclient
, ¡entonces podemos escribir código felizmente! ! ! ^_^